diff --git a/docs/api.md b/docs/api.md index 7790b5168..0d6d5f46e 100644 --- a/docs/api.md +++ b/docs/api.md @@ -827,6 +827,59 @@ schema. The [configuration file](configuration.md) marks the schema collection as listed but not served. +## Playground + +Everything under `/self/v1/api/playground` evaluates a document the caller +supplies in the request rather than one this instance holds. An [authentication +policy](configuration.md) naming `/self/v1/api/playground` governs the whole +namespace, including operations added to it later. + +### Schema Trace + +*This endpoint takes a JSON instance and a JSON Schema in the request body and +traces the evaluation of one against the other, without the schema having to be +in the catalog.* + +``` +POST /self/v1/api/playground/schemas/trace +``` + +The request body is an object rather than the bare instance that [Trace](#trace) +takes: + +| Property | Type | Required | Description | +|-------------|--------|-----|-------------------------------------| +| `/instance` | JSON | Yes | The instance to trace evaluation for | +| `/schema` | Object | Yes | The schema to evaluate it against, which must declare its dialect with [`$schema`](https://www.learnjsonschema.com/2020-12/core/schema/) | + +A [`$ref`](https://www.learnjsonschema.com/2020-12/core/ref/) to a schema in the +catalog or to an official JSON Schema is respected, on the same terms as +fetching that schema directly. Anything else does not resolve. + +To prevent abuse, the number of keywords, the nesting depth and the size of a +schema compiled on demand are limited. Those limits do not apply to a schema +ingested into the catalog the normal way. + +=== "200" + + The same response as [Trace](#trace). + +=== "400" + + The body is not the expected object, or the schema cannot be compiled, which includes a [`$ref`](https://www.learnjsonschema.com/2020-12/core/ref/) in it not resolving. + +=== "413" + + The request body is too large. See [RFC 9110 §15.5.14](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.14). + +=== "417" + + The `Expect` header carries an expectation other than `100-continue`. See [RFC 9110 §10.1.1](https://datatracker.ietf.org/doc/html/rfc9110#section-10.1.1). + +=== "422" + + The schema is too complex to compile. + ## Model Context Protocol !!! success "Enterprise" diff --git a/enterprise/e2e/auth-keys/hurl/playground-trace-authorization.all.hurl b/enterprise/e2e/auth-keys/hurl/playground-trace-authorization.all.hurl new file mode 100644 index 000000000..c508e78cc --- /dev/null +++ b/enterprise/e2e/auth-keys/hurl/playground-trace-authorization.all.hurl @@ -0,0 +1,1035 @@ +# A schema supplied in the request can name any schema in this catalog, so what +# it may reach has to be what the caller may read and nothing more. Trace makes +# that sharper than evaluate does, because a step message carries the values the +# schema was written with, so a reference that resolves when it should not does +# not leak a bit, it prints the schema. +# +# This sandbox gates one collection with each of two keys and leaves a third +# public, and it puts the whole playground namespace under the first policy. So +# the holder of one key is admitted to the route, may reach what is public and +# what their own key gates, and must be refused the other collection entirely. + +# The playground namespace sits under a policy, so nobody reaches the +# compiler without a credential +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "string" + } +} +``` +HTTP 401 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag, WWW-Authenticate +Link: ; rel="describedby" +WWW-Authenticate: Bearer realm="registry" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:authentication-required" +jsonpath "$.title" == "Unauthorized" +jsonpath "$.status" == 401 +jsonpath "$.detail" == "This resource requires authentication" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A credential this instance does not know is no credential at all +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer not-a-real-key +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "string" + } +} +``` +HTTP 401 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag, WWW-Authenticate +Link: ; rel="describedby" +WWW-Authenticate: Bearer realm="registry" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:authentication-required" +jsonpath "$.title" == "Unauthorized" +jsonpath "$.status" == 401 +jsonpath "$.detail" == "This resource requires authentication" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# Admitted, and a schema that references nothing works as it does +# anywhere else +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer vault-secret-key +``` +{ + "instance": "hello", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "string" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 2 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "AssertionTypeStrict" +jsonpath "$.steps[0].evaluatePath" == "/type" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 21 +jsonpath "$.steps[0].keywordLocation" == "#/type" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[1].type" == "pass" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 21 +jsonpath "$.steps[1].keywordLocation" == "#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == "The value was expected to be of type string" +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference to what is public resolves for anybody admitted to the route +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer vault-secret-key +``` +{ + "instance": "hello", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/open/string" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 5 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 21 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "pass" +jsonpath "$.steps[1].name" == "AnnotationEmit" +jsonpath "$.steps[1].evaluatePath" == "/$ref/title" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 21 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/open/string#/title" +jsonpath "$.steps[1].annotation" == "An open string" +jsonpath "$.steps[1].message" == "The title of the instance was \"An open string\"" +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[2].type" == "push" +jsonpath "$.steps[2].name" == "AssertionTypeStrict" +jsonpath "$.steps[2].evaluatePath" == "/$ref/type" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 2 +jsonpath "$.steps[2].instancePositions[3]" == 21 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/open/string#/type" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == null +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[3].type" == "pass" +jsonpath "$.steps[3].name" == "AssertionTypeStrict" +jsonpath "$.steps[3].evaluatePath" == "/$ref/type" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 2 +jsonpath "$.steps[3].instancePositions[3]" == 21 +jsonpath "$.steps[3].keywordLocation" == "{{base}}/open/string#/type" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == "The value was expected to be of type string" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[4].type" == "pass" +jsonpath "$.steps[4].name" == "ControlJump" +jsonpath "$.steps[4].evaluatePath" == "/$ref" +jsonpath "$.steps[4].instanceLocation" == "" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 2 +jsonpath "$.steps[4].instancePositions[1]" == 3 +jsonpath "$.steps[4].instancePositions[2]" == 2 +jsonpath "$.steps[4].instancePositions[3]" == 21 +jsonpath "$.steps[4].keywordLocation" == "#/$ref" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == "The string value was expected to validate against the referenced schema" +jsonpath "$.steps[4].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference to the collection this caller's own key gates resolves, and +# what that schema says decides the verdict +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer vault-secret-key +``` +{ + "instance": { + "token": "abc" + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/vault/secret" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 17 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 4 +jsonpath "$.steps[0].instancePositions[3]" == 3 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "AssertionDefinesStrict" +jsonpath "$.steps[1].evaluatePath" == "/$ref/required" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 4 +jsonpath "$.steps[1].instancePositions[3]" == 3 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/vault/secret#/required" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[2].type" == "pass" +jsonpath "$.steps[2].name" == "AssertionDefinesStrict" +jsonpath "$.steps[2].evaluatePath" == "/$ref/required" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 4 +jsonpath "$.steps[2].instancePositions[3]" == 3 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/vault/secret#/required" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == "The value was expected to be an object that defines the property \"token\"" +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[3].type" == "pass" +jsonpath "$.steps[3].name" == "AnnotationEmit" +jsonpath "$.steps[3].evaluatePath" == "/$ref/title" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 4 +jsonpath "$.steps[3].instancePositions[3]" == 3 +jsonpath "$.steps[3].keywordLocation" == "{{base}}/vault/secret#/title" +jsonpath "$.steps[3].annotation" == "A gated object" +jsonpath "$.steps[3].message" == "The title of the instance was \"A gated object\"" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[4].type" == "push" +jsonpath "$.steps[4].name" == "LogicalWhenType" +jsonpath "$.steps[4].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[4].instanceLocation" == "" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 2 +jsonpath "$.steps[4].instancePositions[1]" == 3 +jsonpath "$.steps[4].instancePositions[2]" == 4 +jsonpath "$.steps[4].instancePositions[3]" == 3 +jsonpath "$.steps[4].keywordLocation" == "{{base}}/vault/secret#/properties" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == null +jsonpath "$.steps[4].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[5].type" == "push" +jsonpath "$.steps[5].name" == "ControlJump" +jsonpath "$.steps[5].evaluatePath" == "/$ref/properties/token/$ref" +jsonpath "$.steps[5].instanceLocation" == "/token" +jsonpath "$.steps[5].instancePositions" count == 4 +jsonpath "$.steps[5].instancePositions[0]" == 3 +jsonpath "$.steps[5].instancePositions[1]" == 5 +jsonpath "$.steps[5].instancePositions[2]" == 3 +jsonpath "$.steps[5].instancePositions[3]" == 18 +jsonpath "$.steps[5].keywordLocation" == "{{base}}/vault/secret#/properties/token/$ref" +jsonpath "$.steps[5].annotation" == null +jsonpath "$.steps[5].message" == null +jsonpath "$.steps[5].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[6].type" == "pass" +jsonpath "$.steps[6].name" == "AnnotationEmit" +jsonpath "$.steps[6].evaluatePath" == "/$ref/properties/token/$ref/title" +jsonpath "$.steps[6].instanceLocation" == "/token" +jsonpath "$.steps[6].instancePositions" count == 4 +jsonpath "$.steps[6].instancePositions[0]" == 3 +jsonpath "$.steps[6].instancePositions[1]" == 5 +jsonpath "$.steps[6].instancePositions[2]" == 3 +jsonpath "$.steps[6].instancePositions[3]" == 18 +jsonpath "$.steps[6].keywordLocation" == "{{base}}/open/string#/title" +jsonpath "$.steps[6].annotation" == "An open string" +jsonpath "$.steps[6].message" == "The title of the instance location \"/token\" was \"An open string\"" +jsonpath "$.steps[6].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[7].type" == "push" +jsonpath "$.steps[7].name" == "AssertionTypeStrict" +jsonpath "$.steps[7].evaluatePath" == "/$ref/properties/token/$ref/type" +jsonpath "$.steps[7].instanceLocation" == "/token" +jsonpath "$.steps[7].instancePositions" count == 4 +jsonpath "$.steps[7].instancePositions[0]" == 3 +jsonpath "$.steps[7].instancePositions[1]" == 5 +jsonpath "$.steps[7].instancePositions[2]" == 3 +jsonpath "$.steps[7].instancePositions[3]" == 18 +jsonpath "$.steps[7].keywordLocation" == "{{base}}/open/string#/type" +jsonpath "$.steps[7].annotation" == null +jsonpath "$.steps[7].message" == null +jsonpath "$.steps[7].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[8].type" == "pass" +jsonpath "$.steps[8].name" == "AssertionTypeStrict" +jsonpath "$.steps[8].evaluatePath" == "/$ref/properties/token/$ref/type" +jsonpath "$.steps[8].instanceLocation" == "/token" +jsonpath "$.steps[8].instancePositions" count == 4 +jsonpath "$.steps[8].instancePositions[0]" == 3 +jsonpath "$.steps[8].instancePositions[1]" == 5 +jsonpath "$.steps[8].instancePositions[2]" == 3 +jsonpath "$.steps[8].instancePositions[3]" == 18 +jsonpath "$.steps[8].keywordLocation" == "{{base}}/open/string#/type" +jsonpath "$.steps[8].annotation" == null +jsonpath "$.steps[8].message" == "The value was expected to be of type string" +jsonpath "$.steps[8].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[9].type" == "pass" +jsonpath "$.steps[9].name" == "ControlJump" +jsonpath "$.steps[9].evaluatePath" == "/$ref/properties/token/$ref" +jsonpath "$.steps[9].instanceLocation" == "/token" +jsonpath "$.steps[9].instancePositions" count == 4 +jsonpath "$.steps[9].instancePositions[0]" == 3 +jsonpath "$.steps[9].instancePositions[1]" == 5 +jsonpath "$.steps[9].instancePositions[2]" == 3 +jsonpath "$.steps[9].instancePositions[3]" == 18 +jsonpath "$.steps[9].keywordLocation" == "{{base}}/vault/secret#/properties/token/$ref" +jsonpath "$.steps[9].annotation" == null +jsonpath "$.steps[9].message" == "The string value was expected to validate against the referenced schema" +jsonpath "$.steps[9].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[10].type" == "pass" +jsonpath "$.steps[10].name" == "AnnotationEmitWrapped" +jsonpath "$.steps[10].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[10].instanceLocation" == "" +jsonpath "$.steps[10].instancePositions" count == 4 +jsonpath "$.steps[10].instancePositions[0]" == 2 +jsonpath "$.steps[10].instancePositions[1]" == 3 +jsonpath "$.steps[10].instancePositions[2]" == 4 +jsonpath "$.steps[10].instancePositions[3]" == 3 +jsonpath "$.steps[10].keywordLocation" == "{{base}}/vault/secret#/properties" +jsonpath "$.steps[10].annotation" == "token" +jsonpath "$.steps[10].message" == "The object property \"token\" successfully validated against its property subschema" +jsonpath "$.steps[10].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[11].type" == "pass" +jsonpath "$.steps[11].name" == "LogicalWhenType" +jsonpath "$.steps[11].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[11].instanceLocation" == "" +jsonpath "$.steps[11].instancePositions" count == 4 +jsonpath "$.steps[11].instancePositions[0]" == 2 +jsonpath "$.steps[11].instancePositions[1]" == 3 +jsonpath "$.steps[11].instancePositions[2]" == 4 +jsonpath "$.steps[11].instancePositions[3]" == 3 +jsonpath "$.steps[11].keywordLocation" == "{{base}}/vault/secret#/properties" +jsonpath "$.steps[11].annotation" == null +jsonpath "$.steps[11].message" == "The object value was expected to validate against the defined properties subschemas" +jsonpath "$.steps[11].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[12].type" == "push" +jsonpath "$.steps[12].name" == "LoopPropertiesExcept" +jsonpath "$.steps[12].evaluatePath" == "/$ref/additionalProperties" +jsonpath "$.steps[12].instanceLocation" == "" +jsonpath "$.steps[12].instancePositions" count == 4 +jsonpath "$.steps[12].instancePositions[0]" == 2 +jsonpath "$.steps[12].instancePositions[1]" == 3 +jsonpath "$.steps[12].instancePositions[2]" == 4 +jsonpath "$.steps[12].instancePositions[3]" == 3 +jsonpath "$.steps[12].keywordLocation" == "{{base}}/vault/secret#/additionalProperties" +jsonpath "$.steps[12].annotation" == null +jsonpath "$.steps[12].message" == null +jsonpath "$.steps[12].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[13].type" == "pass" +jsonpath "$.steps[13].name" == "LoopPropertiesExcept" +jsonpath "$.steps[13].evaluatePath" == "/$ref/additionalProperties" +jsonpath "$.steps[13].instanceLocation" == "" +jsonpath "$.steps[13].instancePositions" count == 4 +jsonpath "$.steps[13].instancePositions[0]" == 2 +jsonpath "$.steps[13].instancePositions[1]" == 3 +jsonpath "$.steps[13].instancePositions[2]" == 4 +jsonpath "$.steps[13].instancePositions[3]" == 3 +jsonpath "$.steps[13].keywordLocation" == "{{base}}/vault/secret#/additionalProperties" +jsonpath "$.steps[13].annotation" == null +jsonpath "$.steps[13].message" == "The object value was not expected to define additional properties" +jsonpath "$.steps[13].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[14].type" == "push" +jsonpath "$.steps[14].name" == "AssertionTypeStrict" +jsonpath "$.steps[14].evaluatePath" == "/$ref/type" +jsonpath "$.steps[14].instanceLocation" == "" +jsonpath "$.steps[14].instancePositions" count == 4 +jsonpath "$.steps[14].instancePositions[0]" == 2 +jsonpath "$.steps[14].instancePositions[1]" == 3 +jsonpath "$.steps[14].instancePositions[2]" == 4 +jsonpath "$.steps[14].instancePositions[3]" == 3 +jsonpath "$.steps[14].keywordLocation" == "{{base}}/vault/secret#/type" +jsonpath "$.steps[14].annotation" == null +jsonpath "$.steps[14].message" == null +jsonpath "$.steps[14].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[15].type" == "pass" +jsonpath "$.steps[15].name" == "AssertionTypeStrict" +jsonpath "$.steps[15].evaluatePath" == "/$ref/type" +jsonpath "$.steps[15].instanceLocation" == "" +jsonpath "$.steps[15].instancePositions" count == 4 +jsonpath "$.steps[15].instancePositions[0]" == 2 +jsonpath "$.steps[15].instancePositions[1]" == 3 +jsonpath "$.steps[15].instancePositions[2]" == 4 +jsonpath "$.steps[15].instancePositions[3]" == 3 +jsonpath "$.steps[15].keywordLocation" == "{{base}}/vault/secret#/type" +jsonpath "$.steps[15].annotation" == null +jsonpath "$.steps[15].message" == "The value was expected to be of type object" +jsonpath "$.steps[15].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[16].type" == "pass" +jsonpath "$.steps[16].name" == "ControlJump" +jsonpath "$.steps[16].evaluatePath" == "/$ref" +jsonpath "$.steps[16].instanceLocation" == "" +jsonpath "$.steps[16].instancePositions" count == 4 +jsonpath "$.steps[16].instancePositions[0]" == 2 +jsonpath "$.steps[16].instancePositions[1]" == 3 +jsonpath "$.steps[16].instancePositions[2]" == 4 +jsonpath "$.steps[16].instancePositions[3]" == 3 +jsonpath "$.steps[16].keywordLocation" == "#/$ref" +jsonpath "$.steps[16].annotation" == null +jsonpath "$.steps[16].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[16].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# The same reference with an instance that schema refuses, which proves +# the reference genuinely resolved rather than being quietly ignored +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer vault-secret-key +``` +{ + "instance": { + "token": 42 + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/vault/secret" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == false +jsonpath "$.steps" count == 12 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 4 +jsonpath "$.steps[0].instancePositions[3]" == 3 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "AssertionDefinesStrict" +jsonpath "$.steps[1].evaluatePath" == "/$ref/required" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 4 +jsonpath "$.steps[1].instancePositions[3]" == 3 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/vault/secret#/required" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[2].type" == "pass" +jsonpath "$.steps[2].name" == "AssertionDefinesStrict" +jsonpath "$.steps[2].evaluatePath" == "/$ref/required" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 4 +jsonpath "$.steps[2].instancePositions[3]" == 3 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/vault/secret#/required" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == "The value was expected to be an object that defines the property \"token\"" +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[3].type" == "pass" +jsonpath "$.steps[3].name" == "AnnotationEmit" +jsonpath "$.steps[3].evaluatePath" == "/$ref/title" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 4 +jsonpath "$.steps[3].instancePositions[3]" == 3 +jsonpath "$.steps[3].keywordLocation" == "{{base}}/vault/secret#/title" +jsonpath "$.steps[3].annotation" == "A gated object" +jsonpath "$.steps[3].message" == "The title of the instance was \"A gated object\"" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[4].type" == "push" +jsonpath "$.steps[4].name" == "LogicalWhenType" +jsonpath "$.steps[4].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[4].instanceLocation" == "" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 2 +jsonpath "$.steps[4].instancePositions[1]" == 3 +jsonpath "$.steps[4].instancePositions[2]" == 4 +jsonpath "$.steps[4].instancePositions[3]" == 3 +jsonpath "$.steps[4].keywordLocation" == "{{base}}/vault/secret#/properties" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == null +jsonpath "$.steps[4].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[5].type" == "push" +jsonpath "$.steps[5].name" == "ControlJump" +jsonpath "$.steps[5].evaluatePath" == "/$ref/properties/token/$ref" +jsonpath "$.steps[5].instanceLocation" == "/token" +jsonpath "$.steps[5].instancePositions" count == 4 +jsonpath "$.steps[5].instancePositions[0]" == 3 +jsonpath "$.steps[5].instancePositions[1]" == 5 +jsonpath "$.steps[5].instancePositions[2]" == 3 +jsonpath "$.steps[5].instancePositions[3]" == 15 +jsonpath "$.steps[5].keywordLocation" == "{{base}}/vault/secret#/properties/token/$ref" +jsonpath "$.steps[5].annotation" == null +jsonpath "$.steps[5].message" == null +jsonpath "$.steps[5].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[6].type" == "pass" +jsonpath "$.steps[6].name" == "AnnotationEmit" +jsonpath "$.steps[6].evaluatePath" == "/$ref/properties/token/$ref/title" +jsonpath "$.steps[6].instanceLocation" == "/token" +jsonpath "$.steps[6].instancePositions" count == 4 +jsonpath "$.steps[6].instancePositions[0]" == 3 +jsonpath "$.steps[6].instancePositions[1]" == 5 +jsonpath "$.steps[6].instancePositions[2]" == 3 +jsonpath "$.steps[6].instancePositions[3]" == 15 +jsonpath "$.steps[6].keywordLocation" == "{{base}}/open/string#/title" +jsonpath "$.steps[6].annotation" == "An open string" +jsonpath "$.steps[6].message" == "The title of the instance location \"/token\" was \"An open string\"" +jsonpath "$.steps[6].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[7].type" == "push" +jsonpath "$.steps[7].name" == "AssertionTypeStrict" +jsonpath "$.steps[7].evaluatePath" == "/$ref/properties/token/$ref/type" +jsonpath "$.steps[7].instanceLocation" == "/token" +jsonpath "$.steps[7].instancePositions" count == 4 +jsonpath "$.steps[7].instancePositions[0]" == 3 +jsonpath "$.steps[7].instancePositions[1]" == 5 +jsonpath "$.steps[7].instancePositions[2]" == 3 +jsonpath "$.steps[7].instancePositions[3]" == 15 +jsonpath "$.steps[7].keywordLocation" == "{{base}}/open/string#/type" +jsonpath "$.steps[7].annotation" == null +jsonpath "$.steps[7].message" == null +jsonpath "$.steps[7].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[8].type" == "fail" +jsonpath "$.steps[8].name" == "AssertionTypeStrict" +jsonpath "$.steps[8].evaluatePath" == "/$ref/properties/token/$ref/type" +jsonpath "$.steps[8].instanceLocation" == "/token" +jsonpath "$.steps[8].instancePositions" count == 4 +jsonpath "$.steps[8].instancePositions[0]" == 3 +jsonpath "$.steps[8].instancePositions[1]" == 5 +jsonpath "$.steps[8].instancePositions[2]" == 3 +jsonpath "$.steps[8].instancePositions[3]" == 15 +jsonpath "$.steps[8].keywordLocation" == "{{base}}/open/string#/type" +jsonpath "$.steps[8].annotation" == null +jsonpath "$.steps[8].message" == "The value was expected to be of type string but it was of type integer" +jsonpath "$.steps[8].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[9].type" == "fail" +jsonpath "$.steps[9].name" == "ControlJump" +jsonpath "$.steps[9].evaluatePath" == "/$ref/properties/token/$ref" +jsonpath "$.steps[9].instanceLocation" == "/token" +jsonpath "$.steps[9].instancePositions" count == 4 +jsonpath "$.steps[9].instancePositions[0]" == 3 +jsonpath "$.steps[9].instancePositions[1]" == 5 +jsonpath "$.steps[9].instancePositions[2]" == 3 +jsonpath "$.steps[9].instancePositions[3]" == 15 +jsonpath "$.steps[9].keywordLocation" == "{{base}}/vault/secret#/properties/token/$ref" +jsonpath "$.steps[9].annotation" == null +jsonpath "$.steps[9].message" == "The integer value was expected to validate against the referenced schema" +jsonpath "$.steps[9].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[10].type" == "fail" +jsonpath "$.steps[10].name" == "LogicalWhenType" +jsonpath "$.steps[10].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[10].instanceLocation" == "" +jsonpath "$.steps[10].instancePositions" count == 4 +jsonpath "$.steps[10].instancePositions[0]" == 2 +jsonpath "$.steps[10].instancePositions[1]" == 3 +jsonpath "$.steps[10].instancePositions[2]" == 4 +jsonpath "$.steps[10].instancePositions[3]" == 3 +jsonpath "$.steps[10].keywordLocation" == "{{base}}/vault/secret#/properties" +jsonpath "$.steps[10].annotation" == null +jsonpath "$.steps[10].message" == "The object value was expected to validate against the defined properties subschemas" +jsonpath "$.steps[10].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[11].type" == "fail" +jsonpath "$.steps[11].name" == "ControlJump" +jsonpath "$.steps[11].evaluatePath" == "/$ref" +jsonpath "$.steps[11].instanceLocation" == "" +jsonpath "$.steps[11].instancePositions" count == 4 +jsonpath "$.steps[11].instancePositions[0]" == 2 +jsonpath "$.steps[11].instancePositions[1]" == 3 +jsonpath "$.steps[11].instancePositions[2]" == 4 +jsonpath "$.steps[11].instancePositions[3]" == 3 +jsonpath "$.steps[11].keywordLocation" == "#/$ref" +jsonpath "$.steps[11].annotation" == null +jsonpath "$.steps[11].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[11].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A schema nested deeper under the same policy is reachable too, since a +# policy governs everything beneath it +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer vault-secret-key +``` +{ + "instance": {}, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/vault/inner/hidden" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 5 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 16 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "pass" +jsonpath "$.steps[1].name" == "AnnotationEmit" +jsonpath "$.steps[1].evaluatePath" == "/$ref/title" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 16 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/vault/inner/hidden#/title" +jsonpath "$.steps[1].annotation" == "A gated schema one level under the policy" +jsonpath "$.steps[1].message" == "The title of the instance was \"A gated schema one level under the policy\"" +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[2].type" == "push" +jsonpath "$.steps[2].name" == "AssertionTypeStrict" +jsonpath "$.steps[2].evaluatePath" == "/$ref/type" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 2 +jsonpath "$.steps[2].instancePositions[3]" == 16 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/vault/inner/hidden#/type" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == null +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[3].type" == "pass" +jsonpath "$.steps[3].name" == "AssertionTypeStrict" +jsonpath "$.steps[3].evaluatePath" == "/$ref/type" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 2 +jsonpath "$.steps[3].instancePositions[3]" == 16 +jsonpath "$.steps[3].keywordLocation" == "{{base}}/vault/inner/hidden#/type" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == "The value was expected to be of type object" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[4].type" == "pass" +jsonpath "$.steps[4].name" == "ControlJump" +jsonpath "$.steps[4].evaluatePath" == "/$ref" +jsonpath "$.steps[4].instanceLocation" == "" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 2 +jsonpath "$.steps[4].instancePositions[1]" == 3 +jsonpath "$.steps[4].instancePositions[2]" == 2 +jsonpath "$.steps[4].instancePositions[3]" == 16 +jsonpath "$.steps[4].keywordLocation" == "#/$ref" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[4].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# THE ONE THIS FEATURE EXISTS TO PASS. This caller is admitted to the +# route by the first key, but the second collection is gated by a key they do +# not hold. Its schema must not resolve, and nothing of it may appear in the +# answer. The reference itself comes back because the caller wrote it, which +# tells them nothing they did not already know +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer vault-secret-key +``` +{ + "instance": { + "anything": 1 + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/ledger/entry" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "{{base}}/ledger/entry" +jsonpath "$.schemaLocation" == "/$ref" +body not contains "A schema gated by a second policy" +body not contains "steps" +body not contains "valid" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# Being refused and never having been there are one answer, so a path +# under that collection which does not exist reads exactly the same +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer vault-secret-key +``` +{ + "instance": { + "anything": 1 + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/ledger/no-such-schema" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "{{base}}/ledger/no-such-schema" +jsonpath "$.schemaLocation" == "/$ref" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# The credential is read again from the deferred body rather than captured +# off a request that is gone by then. So the holder of the second key, who is +# not admitted to this route at all, is refused here rather than resolving as +# somebody else +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer ledger-secret-key +``` +{ + "instance": { + "anything": 1 + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/vault/secret" + } +} +``` +HTTP 401 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag, WWW-Authenticate +Link: ; rel="describedby" +WWW-Authenticate: Bearer realm="registry" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:authentication-required" +jsonpath "$.title" == "Unauthorized" +jsonpath "$.status" == 401 +jsonpath "$.detail" == "This resource requires authentication" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true diff --git a/enterprise/e2e/auth-keys/one.json b/enterprise/e2e/auth-keys/one.json index 26d1b3603..849c4ec1b 100644 --- a/enterprise/e2e/auth-keys/one.json +++ b/enterprise/e2e/auth-keys/one.json @@ -11,7 +11,8 @@ "name": "vault", "paths": [ "/vault", - "/self/v1/api/schemas/trace" + "/self/v1/api/schemas/trace", + "/self/v1/api/playground" ], "keys": [ { diff --git a/enterprise/e2e/auth-sso/hurl/claims.all.hurl b/enterprise/e2e/auth-sso/hurl/claims.all.hurl index 6e8e6d266..97f97d82f 100644 --- a/enterprise/e2e/auth-sso/hurl/claims.all.hurl +++ b/enterprise/e2e/auth-sso/hurl/claims.all.hurl @@ -125,7 +125,7 @@ root_listing_schema: header "Link" regex "<([^>]+)>" jsonpath "$.path" == "/" jsonpath "$.url" == "{{base}}" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.schemas" == 64 +jsonpath "$.schemas" == 66 jsonpath "$.private" == false jsonpath "$.entries" count == 2 jsonpath "$.entries[0].name" == "public" @@ -138,8 +138,8 @@ jsonpath "$.entries[1].name" == "self" jsonpath "$.entries[1].type" == "directory" jsonpath "$.entries[1].path" == "/self/" jsonpath "$.entries[1].private" == false -jsonpath "$.entries[1].schemas" == 63 -jsonpath "$.entries[1].health" == 100 +jsonpath "$.entries[1].schemas" == 65 +jsonpath "$.entries[1].health" == 99 POST {{base}}/self/v1/api/schemas/evaluate{{root_listing_schema}} ``` diff --git a/enterprise/e2e/auth-sso/hurl/mcp-session.all.hurl b/enterprise/e2e/auth-sso/hurl/mcp-session.all.hurl index 4b3add645..da0a0c45d 100644 --- a/enterprise/e2e/auth-sso/hurl/mcp-session.all.hurl +++ b/enterprise/e2e/auth-sso/hurl/mcp-session.all.hurl @@ -348,7 +348,7 @@ Link: ; rel="describedby" [Captures] session_page_two: body [Asserts] -jsonpath "$.result.resources" count == 16 +jsonpath "$.result.resources" count == 18 jsonpath "$.result.nextCursor" not exists jsonpath "$.result.resources[*].uri" not includes "{{base}}/discovery/thing" jsonpath "$.result.resources[*].uri" not includes "{{base}}/unavailable/thing" diff --git a/enterprise/e2e/auth/hurl/directory.all.hurl b/enterprise/e2e/auth/hurl/directory.all.hurl index e90bc099a..28018921d 100644 --- a/enterprise/e2e/auth/hurl/directory.all.hurl +++ b/enterprise/e2e/auth/hurl/directory.all.hurl @@ -19,7 +19,7 @@ header "ETag" exists jsonpath "$.path" == "/" jsonpath "$.url" == "{{base}}" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.schemas" == 65 +jsonpath "$.schemas" == 67 jsonpath "$.private" == false jsonpath "$.entries" count == 3 jsonpath "$.entries[0].name" == "orphan" @@ -38,8 +38,8 @@ jsonpath "$.entries[2].name" == "self" jsonpath "$.entries[2].type" == "directory" jsonpath "$.entries[2].path" == "/self/" jsonpath "$.entries[2].private" == false -jsonpath "$.entries[2].schemas" == 63 -jsonpath "$.entries[2].health" == 100 +jsonpath "$.entries[2].schemas" == 65 +jsonpath "$.entries[2].health" == 99 POST {{base}}/self/v1/api/schemas/evaluate{{root_listing_schema}} ``` {{root_listing}} @@ -72,7 +72,7 @@ header "ETag" != "{{root_etag}}" jsonpath "$.path" == "/" jsonpath "$.url" == "{{base}}" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.schemas" == 68 +jsonpath "$.schemas" == 70 jsonpath "$.private" == false jsonpath "$.entries" count == 5 jsonpath "$.entries[0].name" == "orphan" @@ -103,8 +103,8 @@ jsonpath "$.entries[4].name" == "self" jsonpath "$.entries[4].type" == "directory" jsonpath "$.entries[4].path" == "/self/" jsonpath "$.entries[4].private" == false -jsonpath "$.entries[4].schemas" == 63 -jsonpath "$.entries[4].health" == 100 +jsonpath "$.entries[4].schemas" == 65 +jsonpath "$.entries[4].health" == 99 POST {{base}}/self/v1/api/schemas/evaluate{{reports_listing_schema}} Authorization: Bearer primary-secret-key diff --git a/enterprise/e2e/auth/hurl/mcp-jwt.all.hurl b/enterprise/e2e/auth/hurl/mcp-jwt.all.hurl index 816d2cf24..cf350a835 100644 --- a/enterprise/e2e/auth/hurl/mcp-jwt.all.hurl +++ b/enterprise/e2e/auth/hurl/mcp-jwt.all.hurl @@ -119,7 +119,7 @@ Link: ; rel="describedby" [Captures] page_two_body: body [Asserts] -jsonpath "$.result.resources" count == 16 +jsonpath "$.result.resources" count == 18 jsonpath "$.result.nextCursor" not exists jsonpath "$.result.resources[*].uri" not includes "{{base}}/strict/rule" jsonpath "$.result.resources[*].uri" not includes "{{base}}/typed/thing" diff --git a/enterprise/e2e/auth/hurl/mcp-resources.all.hurl b/enterprise/e2e/auth/hurl/mcp-resources.all.hurl index e2d3dba67..a10fa2231 100644 --- a/enterprise/e2e/auth/hurl/mcp-resources.all.hurl +++ b/enterprise/e2e/auth/hurl/mcp-resources.all.hurl @@ -50,7 +50,7 @@ jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/api/error" jsonpath "$.result.resources[3].name" == "Sourcemeta One API Error" jsonpath "$.result.resources[3].description" == "The error response format returned by the Sourcemeta One API endpoints" jsonpath "$.result.resources[3].mimeType" == "application/schema+json" -jsonpath "$.result.resources[3].size" == 9525 +jsonpath "$.result.resources[3].size" == 11208 jsonpath "$.result.resources[3].annotations.priority" == 0 jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/api/list/response" jsonpath "$.result.resources[4].name" == "Sourcemeta One List API Response" @@ -58,275 +58,275 @@ jsonpath "$.result.resources[4].description" == "The response format for the dir jsonpath "$.result.resources[4].mimeType" == "application/schema+json" jsonpath "$.result.resources[4].size" == 3878 jsonpath "$.result.resources[4].annotations.priority" == 0 -jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response" -jsonpath "$.result.resources[5].name" == "Sourcemeta One Schema Dependencies API Response" -jsonpath "$.result.resources[5].description" == "The response format for the schema dependencies API endpoint" +jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/response" +jsonpath "$.result.resources[5].name" == "Sourcemeta One Playground Schema Trace API Response" +jsonpath "$.result.resources[5].description" == "The response format for tracing evaluation against a schema supplied in the request, which is what tracing against a schema in the catalog returns" jsonpath "$.result.resources[5].mimeType" == "application/schema+json" -jsonpath "$.result.resources[5].size" == 992 +jsonpath "$.result.resources[5].size" == 501 jsonpath "$.result.resources[5].annotations.priority" == 0 -jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/api/schemas/dependents/response" -jsonpath "$.result.resources[6].name" == "Sourcemeta One Schema Dependents API Response" -jsonpath "$.result.resources[6].description" == "The response format for the schema dependents API endpoint" +jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response" +jsonpath "$.result.resources[6].name" == "Sourcemeta One Schema Dependencies API Response" +jsonpath "$.result.resources[6].description" == "The response format for the schema dependencies API endpoint" jsonpath "$.result.resources[6].mimeType" == "application/schema+json" -jsonpath "$.result.resources[6].size" == 986 +jsonpath "$.result.resources[6].size" == 992 jsonpath "$.result.resources[6].annotations.priority" == 0 -jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/request" -jsonpath "$.result.resources[7].name" == "Sourcemeta One Schema Evaluate API Request" -jsonpath "$.result.resources[7].description" == "The JSON instance to validate against a schema in the catalog" +jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/api/schemas/dependents/response" +jsonpath "$.result.resources[7].name" == "Sourcemeta One Schema Dependents API Response" +jsonpath "$.result.resources[7].description" == "The response format for the schema dependents API endpoint" jsonpath "$.result.resources[7].mimeType" == "application/schema+json" -jsonpath "$.result.resources[7].size" == 417 +jsonpath "$.result.resources[7].size" == 986 jsonpath "$.result.resources[7].annotations.priority" == 0 -jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response" -jsonpath "$.result.resources[8].name" == "Sourcemeta One Schema Evaluate API Response" -jsonpath "$.result.resources[8].description" == "The response format for the schema evaluation API endpoint" +jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/request" +jsonpath "$.result.resources[8].name" == "Sourcemeta One Schema Evaluate API Request" +jsonpath "$.result.resources[8].description" == "The JSON instance to validate against a schema in the catalog" jsonpath "$.result.resources[8].mimeType" == "application/schema+json" -jsonpath "$.result.resources[8].size" == 2138 +jsonpath "$.result.resources[8].size" == 417 jsonpath "$.result.resources[8].annotations.priority" == 0 -jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/api/schemas/health/response" -jsonpath "$.result.resources[9].name" == "Sourcemeta One Schema Health API Response" -jsonpath "$.result.resources[9].description" == "The response format for the schema health API endpoint" +jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response" +jsonpath "$.result.resources[9].name" == "Sourcemeta One Schema Evaluate API Response" +jsonpath "$.result.resources[9].description" == "The response format for the schema evaluation API endpoint" jsonpath "$.result.resources[9].mimeType" == "application/schema+json" -jsonpath "$.result.resources[9].size" == 1584 +jsonpath "$.result.resources[9].size" == 2138 jsonpath "$.result.resources[9].annotations.priority" == 0 -jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/api/schemas/locations/response" -jsonpath "$.result.resources[10].name" == "Sourcemeta One Schema Locations API Response" -jsonpath "$.result.resources[10].description" == "The response format for the schema frame locations API endpoint" +jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/api/schemas/health/response" +jsonpath "$.result.resources[10].name" == "Sourcemeta One Schema Health API Response" +jsonpath "$.result.resources[10].description" == "The response format for the schema health API endpoint" jsonpath "$.result.resources[10].mimeType" == "application/schema+json" -jsonpath "$.result.resources[10].size" == 2391 +jsonpath "$.result.resources[10].size" == 1584 jsonpath "$.result.resources[10].annotations.priority" == 0 -jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/api/schemas/metadata/response" -jsonpath "$.result.resources[11].name" == "Sourcemeta One Schema Metadata API Response" -jsonpath "$.result.resources[11].description" == "The response format for the schema metadata API endpoint" +jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/api/schemas/locations/response" +jsonpath "$.result.resources[11].name" == "Sourcemeta One Schema Locations API Response" +jsonpath "$.result.resources[11].description" == "The response format for the schema frame locations API endpoint" jsonpath "$.result.resources[11].mimeType" == "application/schema+json" -jsonpath "$.result.resources[11].size" == 2943 +jsonpath "$.result.resources[11].size" == 2391 jsonpath "$.result.resources[11].annotations.priority" == 0 -jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/api/schemas/output-error" -jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Output Error" -jsonpath "$.result.resources[12].description" == "A single entry of the standard JSON Schema output format that describes why an instance does not conform to a schema" +jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/api/schemas/metadata/response" +jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Metadata API Response" +jsonpath "$.result.resources[12].description" == "The response format for the schema metadata API endpoint" jsonpath "$.result.resources[12].mimeType" == "application/schema+json" -jsonpath "$.result.resources[12].size" == 1143 +jsonpath "$.result.resources[12].size" == 2943 jsonpath "$.result.resources[12].annotations.priority" == 0 -jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/api/schemas/position" -jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Position" -jsonpath "$.result.resources[13].description" == "Represents a position in a JSON document as line start, column start, line end, and column end" +jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/api/schemas/output-error" +jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Output Error" +jsonpath "$.result.resources[13].description" == "A single entry of the standard JSON Schema output format that describes why an instance does not conform to a schema" jsonpath "$.result.resources[13].mimeType" == "application/schema+json" -jsonpath "$.result.resources[13].size" == 446 +jsonpath "$.result.resources[13].size" == 1143 jsonpath "$.result.resources[13].annotations.priority" == 0 -jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/api/schemas/positions/response" -jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Positions API Response" -jsonpath "$.result.resources[14].description" == "The response format for the schema positions API endpoint" +jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/api/schemas/position" +jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Position" +jsonpath "$.result.resources[14].description" == "Represents a position in a JSON document as line start, column start, line end, and column end" jsonpath "$.result.resources[14].mimeType" == "application/schema+json" -jsonpath "$.result.resources[14].size" == 435 +jsonpath "$.result.resources[14].size" == 446 jsonpath "$.result.resources[14].annotations.priority" == 0 -jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/request" -jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema RDF API Request" -jsonpath "$.result.resources[15].description" == "The JSON instance to promote to JSON-LD against a schema in the catalog, along with the desired output form" +jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/api/schemas/positions/response" +jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Positions API Response" +jsonpath "$.result.resources[15].description" == "The response format for the schema positions API endpoint" jsonpath "$.result.resources[15].mimeType" == "application/schema+json" -jsonpath "$.result.resources[15].size" == 1422 +jsonpath "$.result.resources[15].size" == 435 jsonpath "$.result.resources[15].annotations.priority" == 0 -jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/response" -jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema RDF API Response" -jsonpath "$.result.resources[16].description" == "The instance promoted to JSON-LD, in expanded, flattened, or compacted form" +jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/request" +jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema RDF API Request" +jsonpath "$.result.resources[16].description" == "The JSON instance to promote to JSON-LD against a schema in the catalog, along with the desired output form" jsonpath "$.result.resources[16].mimeType" == "application/schema+json" -jsonpath "$.result.resources[16].size" == 799 +jsonpath "$.result.resources[16].size" == 1422 jsonpath "$.result.resources[16].annotations.priority" == 0 -jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/api/schemas/search/response" -jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema Search API Response" -jsonpath "$.result.resources[17].description" == "The response format for the schema search API endpoint" +jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/response" +jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema RDF API Response" +jsonpath "$.result.resources[17].description" == "The instance promoted to JSON-LD, in expanded, flattened, or compacted form" jsonpath "$.result.resources[17].mimeType" == "application/schema+json" -jsonpath "$.result.resources[17].size" == 1341 +jsonpath "$.result.resources[17].size" == 799 jsonpath "$.result.resources[17].annotations.priority" == 0 -jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/api/schemas/stats/response" -jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema Stats API Response" -jsonpath "$.result.resources[18].description" == "The response format for the schema statistics API endpoint" +jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/api/schemas/search/response" +jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema Search API Response" +jsonpath "$.result.resources[18].description" == "The response format for the schema search API endpoint" jsonpath "$.result.resources[18].mimeType" == "application/schema+json" -jsonpath "$.result.resources[18].size" == 2345 +jsonpath "$.result.resources[18].size" == 1341 jsonpath "$.result.resources[18].annotations.priority" == 0 -jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/request" -jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema Trace API Request" -jsonpath "$.result.resources[19].description" == "The JSON instance to trace evaluation against a schema in the catalog" +jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/api/schemas/stats/response" +jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema Stats API Response" +jsonpath "$.result.resources[19].description" == "The response format for the schema statistics API endpoint" jsonpath "$.result.resources[19].mimeType" == "application/schema+json" -jsonpath "$.result.resources[19].size" == 419 +jsonpath "$.result.resources[19].size" == 2345 jsonpath "$.result.resources[19].annotations.priority" == 0 -jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/response" -jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Trace API Response" -jsonpath "$.result.resources[20].description" == "The response format for the schema trace API endpoint" +jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/request" +jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Trace API Request" +jsonpath "$.result.resources[20].description" == "The JSON instance to trace evaluation against a schema in the catalog" jsonpath "$.result.resources[20].mimeType" == "application/schema+json" -jsonpath "$.result.resources[20].size" == 2118 +jsonpath "$.result.resources[20].size" == 419 jsonpath "$.result.resources[20].annotations.priority" == 0 -jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/mcp/error" -jsonpath "$.result.resources[21].name" == "Sourcemeta One MCP Error Response" -jsonpath "$.result.resources[21].description" == "The error response Sourcemeta One returns when an MCP request fails" +jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/response" +jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Trace API Response" +jsonpath "$.result.resources[21].description" == "The response format for the schema trace API endpoint" jsonpath "$.result.resources[21].mimeType" == "application/schema+json" -jsonpath "$.result.resources[21].size" == 5860 +jsonpath "$.result.resources[21].size" == 2290 jsonpath "$.result.resources[21].annotations.priority" == 0 -jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/mcp/initialize/request" -jsonpath "$.result.resources[22].name" == "Sourcemeta One MCP Initialize Request" -jsonpath "$.result.resources[22].description" == "Connection handshake from a client" +jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/mcp/error" +jsonpath "$.result.resources[22].name" == "Sourcemeta One MCP Error Response" +jsonpath "$.result.resources[22].description" == "The error response Sourcemeta One returns when an MCP request fails" jsonpath "$.result.resources[22].mimeType" == "application/schema+json" -jsonpath "$.result.resources[22].size" == 4617 +jsonpath "$.result.resources[22].size" == 5860 jsonpath "$.result.resources[22].annotations.priority" == 0 -jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/mcp/initialize/response" -jsonpath "$.result.resources[23].name" == "Sourcemeta One MCP Initialize Response" -jsonpath "$.result.resources[23].description" == "Sourcemeta One's response to a client's initialization" +jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/mcp/initialize/request" +jsonpath "$.result.resources[23].name" == "Sourcemeta One MCP Initialize Request" +jsonpath "$.result.resources[23].description" == "Connection handshake from a client" jsonpath "$.result.resources[23].mimeType" == "application/schema+json" -jsonpath "$.result.resources[23].size" == 2524 +jsonpath "$.result.resources[23].size" == 4617 jsonpath "$.result.resources[23].annotations.priority" == 0 -jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" -jsonpath "$.result.resources[24].name" == "Sourcemeta One MCP Cancelled Notification" -jsonpath "$.result.resources[24].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" +jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/initialize/response" +jsonpath "$.result.resources[24].name" == "Sourcemeta One MCP Initialize Response" +jsonpath "$.result.resources[24].description" == "Sourcemeta One's response to a client's initialization" jsonpath "$.result.resources[24].mimeType" == "application/schema+json" -jsonpath "$.result.resources[24].size" == 1163 +jsonpath "$.result.resources[24].size" == 2524 jsonpath "$.result.resources[24].annotations.priority" == 0 -jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" -jsonpath "$.result.resources[25].name" == "Sourcemeta One MCP Initialized Notification" -jsonpath "$.result.resources[25].description" == "Client signal that the handshake is complete and normal operation may begin" +jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" +jsonpath "$.result.resources[25].name" == "Sourcemeta One MCP Cancelled Notification" +jsonpath "$.result.resources[25].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" jsonpath "$.result.resources[25].mimeType" == "application/schema+json" -jsonpath "$.result.resources[25].size" == 740 +jsonpath "$.result.resources[25].size" == 1163 jsonpath "$.result.resources[25].annotations.priority" == 0 -jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" -jsonpath "$.result.resources[26].name" == "Sourcemeta One MCP Ping Request" -jsonpath "$.result.resources[26].description" == "Liveness check from a client" +jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" +jsonpath "$.result.resources[26].name" == "Sourcemeta One MCP Initialized Notification" +jsonpath "$.result.resources[26].description" == "Client signal that the handshake is complete and normal operation may begin" jsonpath "$.result.resources[26].mimeType" == "application/schema+json" -jsonpath "$.result.resources[26].size" == 695 +jsonpath "$.result.resources[26].size" == 740 jsonpath "$.result.resources[26].annotations.priority" == 0 -jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" -jsonpath "$.result.resources[27].name" == "Sourcemeta One MCP Ping Response" -jsonpath "$.result.resources[27].description" == "Sourcemeta One's response to a liveness check" +jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" +jsonpath "$.result.resources[27].name" == "Sourcemeta One MCP Ping Request" +jsonpath "$.result.resources[27].description" == "Liveness check from a client" jsonpath "$.result.resources[27].mimeType" == "application/schema+json" -jsonpath "$.result.resources[27].size" == 598 +jsonpath "$.result.resources[27].size" == 695 jsonpath "$.result.resources[27].annotations.priority" == 0 -jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" -jsonpath "$.result.resources[28].name" == "Sourcemeta One MCP Protected Resource Metadata Response" -jsonpath "$.result.resources[28].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" +jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" +jsonpath "$.result.resources[28].name" == "Sourcemeta One MCP Ping Response" +jsonpath "$.result.resources[28].description" == "Sourcemeta One's response to a liveness check" jsonpath "$.result.resources[28].mimeType" == "application/schema+json" -jsonpath "$.result.resources[28].size" == 2176 +jsonpath "$.result.resources[28].size" == 598 jsonpath "$.result.resources[28].annotations.priority" == 0 -jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/request" -jsonpath "$.result.resources[29].name" == "Sourcemeta One MCP Request" -jsonpath "$.result.resources[29].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" +jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" +jsonpath "$.result.resources[29].name" == "Sourcemeta One MCP Protected Resource Metadata Response" +jsonpath "$.result.resources[29].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" jsonpath "$.result.resources[29].mimeType" == "application/schema+json" -jsonpath "$.result.resources[29].size" == 2520 +jsonpath "$.result.resources[29].size" == 2176 jsonpath "$.result.resources[29].annotations.priority" == 0 -jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" -jsonpath "$.result.resources[30].name" == "Sourcemeta One MCP Resources List Request" -jsonpath "$.result.resources[30].description" == "Request from a client to list MCP resources" +jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/request" +jsonpath "$.result.resources[30].name" == "Sourcemeta One MCP Request" +jsonpath "$.result.resources[30].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" jsonpath "$.result.resources[30].mimeType" == "application/schema+json" -jsonpath "$.result.resources[30].size" == 1071 +jsonpath "$.result.resources[30].size" == 2520 jsonpath "$.result.resources[30].annotations.priority" == 0 -jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" -jsonpath "$.result.resources[31].name" == "Sourcemeta One MCP Resources List Response" -jsonpath "$.result.resources[31].description" == "Sourcemeta One's list of MCP resources" +jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" +jsonpath "$.result.resources[31].name" == "Sourcemeta One MCP Resources List Request" +jsonpath "$.result.resources[31].description" == "Request from a client to list MCP resources" jsonpath "$.result.resources[31].mimeType" == "application/schema+json" -jsonpath "$.result.resources[31].size" == 3062 +jsonpath "$.result.resources[31].size" == 1071 jsonpath "$.result.resources[31].annotations.priority" == 0 -jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" -jsonpath "$.result.resources[32].name" == "Sourcemeta One MCP Resources Read Request" -jsonpath "$.result.resources[32].description" == "Request from a client to read an MCP resource" +jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" +jsonpath "$.result.resources[32].name" == "Sourcemeta One MCP Resources List Response" +jsonpath "$.result.resources[32].description" == "Sourcemeta One's list of MCP resources" jsonpath "$.result.resources[32].mimeType" == "application/schema+json" -jsonpath "$.result.resources[32].size" == 1293 +jsonpath "$.result.resources[32].size" == 3062 jsonpath "$.result.resources[32].annotations.priority" == 0 -jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" -jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Resources Read Response" -jsonpath "$.result.resources[33].description" == "Sourcemeta One's response containing an MCP resource" +jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" +jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Resources Read Request" +jsonpath "$.result.resources[33].description" == "Request from a client to read an MCP resource" jsonpath "$.result.resources[33].mimeType" == "application/schema+json" -jsonpath "$.result.resources[33].size" == 1754 +jsonpath "$.result.resources[33].size" == 1293 jsonpath "$.result.resources[33].annotations.priority" == 0 -jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" -jsonpath "$.result.resources[34].name" == "Sourcemeta One MCP Resources Templates List Request" -jsonpath "$.result.resources[34].description" == "Request from a client to list MCP resource templates" +jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" +jsonpath "$.result.resources[34].name" == "Sourcemeta One MCP Resources Read Response" +jsonpath "$.result.resources[34].description" == "Sourcemeta One's response containing an MCP resource" jsonpath "$.result.resources[34].mimeType" == "application/schema+json" -jsonpath "$.result.resources[34].size" == 922 +jsonpath "$.result.resources[34].size" == 1754 jsonpath "$.result.resources[34].annotations.priority" == 0 -jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" -jsonpath "$.result.resources[35].name" == "Sourcemeta One MCP Resources Templates List Response" -jsonpath "$.result.resources[35].description" == "Sourcemeta One's list of MCP resource templates" +jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" +jsonpath "$.result.resources[35].name" == "Sourcemeta One MCP Resources Templates List Request" +jsonpath "$.result.resources[35].description" == "Request from a client to list MCP resource templates" jsonpath "$.result.resources[35].mimeType" == "application/schema+json" -jsonpath "$.result.resources[35].size" == 2927 +jsonpath "$.result.resources[35].size" == 922 jsonpath "$.result.resources[35].annotations.priority" == 0 -jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/response" -jsonpath "$.result.resources[36].name" == "Sourcemeta One MCP Response" -jsonpath "$.result.resources[36].description" == "Any outgoing MCP response the server returns" +jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" +jsonpath "$.result.resources[36].name" == "Sourcemeta One MCP Resources Templates List Response" +jsonpath "$.result.resources[36].description" == "Sourcemeta One's list of MCP resource templates" jsonpath "$.result.resources[36].mimeType" == "application/schema+json" -jsonpath "$.result.resources[36].size" == 4799 +jsonpath "$.result.resources[36].size" == 2927 jsonpath "$.result.resources[36].annotations.priority" == 0 -jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" -jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Evaluate RPC Input" -jsonpath "$.result.resources[37].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" +jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/response" +jsonpath "$.result.resources[37].name" == "Sourcemeta One MCP Response" +jsonpath "$.result.resources[37].description" == "Any outgoing MCP response the server returns" jsonpath "$.result.resources[37].mimeType" == "application/schema+json" -jsonpath "$.result.resources[37].size" == 1566 +jsonpath "$.result.resources[37].size" == 4799 jsonpath "$.result.resources[37].annotations.priority" == 0 -jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" -jsonpath "$.result.resources[38].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" +jsonpath "$.result.resources[38].name" == "Sourcemeta One Schema Evaluate RPC Input" jsonpath "$.result.resources[38].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[38].mimeType" == "application/schema+json" -jsonpath "$.result.resources[38].size" == 441 +jsonpath "$.result.resources[38].size" == 1566 jsonpath "$.result.resources[38].annotations.priority" == 0 -jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" -jsonpath "$.result.resources[39].name" == "Sourcemeta One Schema Dependencies RPC Input" -jsonpath "$.result.resources[39].description" == "Get all direct and indirect dependencies of a schema in the catalog" +jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" +jsonpath "$.result.resources[39].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[39].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[39].mimeType" == "application/schema+json" -jsonpath "$.result.resources[39].size" == 687 +jsonpath "$.result.resources[39].size" == 441 jsonpath "$.result.resources[39].annotations.priority" == 0 -jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" -jsonpath "$.result.resources[40].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" +jsonpath "$.result.resources[40].name" == "Sourcemeta One Schema Dependencies RPC Input" jsonpath "$.result.resources[40].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[40].mimeType" == "application/schema+json" -jsonpath "$.result.resources[40].size" == 741 +jsonpath "$.result.resources[40].size" == 687 jsonpath "$.result.resources[40].annotations.priority" == 0 -jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" -jsonpath "$.result.resources[41].name" == "Sourcemeta One Schema Dependents RPC Input" -jsonpath "$.result.resources[41].description" == "Get all direct and transitive dependents of a schema in the catalog" +jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" +jsonpath "$.result.resources[41].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[41].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[41].mimeType" == "application/schema+json" -jsonpath "$.result.resources[41].size" == 683 +jsonpath "$.result.resources[41].size" == 741 jsonpath "$.result.resources[41].annotations.priority" == 0 -jsonpath "$.result.resources[42].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" -jsonpath "$.result.resources[42].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[42].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" +jsonpath "$.result.resources[42].name" == "Sourcemeta One Schema Dependents RPC Input" jsonpath "$.result.resources[42].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[42].mimeType" == "application/schema+json" -jsonpath "$.result.resources[42].size" == 735 +jsonpath "$.result.resources[42].size" == 683 jsonpath "$.result.resources[42].annotations.priority" == 0 -jsonpath "$.result.resources[43].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" -jsonpath "$.result.resources[43].name" == "Sourcemeta One Schema Health RPC Input" -jsonpath "$.result.resources[43].description" == "Get the health analysis and score of a schema in the catalog" +jsonpath "$.result.resources[43].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" +jsonpath "$.result.resources[43].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[43].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[43].mimeType" == "application/schema+json" -jsonpath "$.result.resources[43].size" == 668 +jsonpath "$.result.resources[43].size" == 735 jsonpath "$.result.resources[43].annotations.priority" == 0 -jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" -jsonpath "$.result.resources[44].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" +jsonpath "$.result.resources[44].name" == "Sourcemeta One Schema Health RPC Input" jsonpath "$.result.resources[44].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[44].mimeType" == "application/schema+json" -jsonpath "$.result.resources[44].size" == 415 +jsonpath "$.result.resources[44].size" == 668 jsonpath "$.result.resources[44].annotations.priority" == 0 -jsonpath "$.result.resources[45].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" -jsonpath "$.result.resources[45].name" == "Sourcemeta One Schema Locations RPC Input" -jsonpath "$.result.resources[45].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" +jsonpath "$.result.resources[45].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" +jsonpath "$.result.resources[45].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[45].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[45].mimeType" == "application/schema+json" -jsonpath "$.result.resources[45].size" == 720 +jsonpath "$.result.resources[45].size" == 415 jsonpath "$.result.resources[45].annotations.priority" == 0 -jsonpath "$.result.resources[46].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" -jsonpath "$.result.resources[46].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[46].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" +jsonpath "$.result.resources[46].name" == "Sourcemeta One Schema Locations RPC Input" jsonpath "$.result.resources[46].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[46].mimeType" == "application/schema+json" -jsonpath "$.result.resources[46].size" == 471 +jsonpath "$.result.resources[46].size" == 720 jsonpath "$.result.resources[46].annotations.priority" == 0 -jsonpath "$.result.resources[47].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" -jsonpath "$.result.resources[47].name" == "Sourcemeta One Schema Metadata RPC Input" -jsonpath "$.result.resources[47].description" == "Get metadata information about a schema in the catalog" +jsonpath "$.result.resources[47].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" +jsonpath "$.result.resources[47].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[47].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[47].mimeType" == "application/schema+json" -jsonpath "$.result.resources[47].size" == 666 +jsonpath "$.result.resources[47].size" == 471 jsonpath "$.result.resources[47].annotations.priority" == 0 -jsonpath "$.result.resources[48].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" -jsonpath "$.result.resources[48].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[48].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" +jsonpath "$.result.resources[48].name" == "Sourcemeta One Schema Metadata RPC Input" jsonpath "$.result.resources[48].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[48].mimeType" == "application/schema+json" -jsonpath "$.result.resources[48].size" == 843 +jsonpath "$.result.resources[48].size" == 666 jsonpath "$.result.resources[48].annotations.priority" == 0 -jsonpath "$.result.resources[49].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" -jsonpath "$.result.resources[49].name" == "Sourcemeta One Schema Positions RPC Input" -jsonpath "$.result.resources[49].description" == "Get line and column position information for every token in a schema" +jsonpath "$.result.resources[49].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" +jsonpath "$.result.resources[49].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[49].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[49].mimeType" == "application/schema+json" -jsonpath "$.result.resources[49].size" == 682 +jsonpath "$.result.resources[49].size" == 843 jsonpath "$.result.resources[49].annotations.priority" == 0 POST {{base}}/self/v1/api/schemas/evaluate{{anonymous_list_schema}} @@ -355,92 +355,110 @@ Content-Type: application/json [Asserts] jsonpath "$.jsonrpc" == "2.0" jsonpath "$.id" == 2 -jsonpath "$.result.resources" count == 15 +jsonpath "$.result.resources" count == 17 jsonpath "$.result.nextCursor" not exists -jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" -jsonpath "$.result.resources[0].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" +jsonpath "$.result.resources[0].name" == "Sourcemeta One Schema Positions RPC Input" jsonpath "$.result.resources[0].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[0].mimeType" == "application/schema+json" -jsonpath "$.result.resources[0].size" == 435 +jsonpath "$.result.resources[0].size" == 682 jsonpath "$.result.resources[0].annotations.priority" == 0 -jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" -jsonpath "$.result.resources[1].name" == "Sourcemeta One Schema Statistics RPC Input" -jsonpath "$.result.resources[1].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" +jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" +jsonpath "$.result.resources[1].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[1].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[1].mimeType" == "application/schema+json" -jsonpath "$.result.resources[1].size" == 703 +jsonpath "$.result.resources[1].size" == 435 jsonpath "$.result.resources[1].annotations.priority" == 0 -jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" -jsonpath "$.result.resources[2].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" +jsonpath "$.result.resources[2].name" == "Sourcemeta One Schema Statistics RPC Input" jsonpath "$.result.resources[2].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[2].mimeType" == "application/schema+json" -jsonpath "$.result.resources[2].size" == 709 +jsonpath "$.result.resources[2].size" == 703 jsonpath "$.result.resources[2].annotations.priority" == 0 -jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" -jsonpath "$.result.resources[3].name" == "Sourcemeta One Schema RDF RPC Input" -jsonpath "$.result.resources[3].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" +jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" +jsonpath "$.result.resources[3].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[3].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[3].mimeType" == "application/schema+json" -jsonpath "$.result.resources[3].size" == 2558 +jsonpath "$.result.resources[3].size" == 709 jsonpath "$.result.resources[3].annotations.priority" == 0 -jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" -jsonpath "$.result.resources[4].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" +jsonpath "$.result.resources[4].name" == "Sourcemeta One Schema RDF RPC Input" jsonpath "$.result.resources[4].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[4].mimeType" == "application/schema+json" -jsonpath "$.result.resources[4].size" == 1589 +jsonpath "$.result.resources[4].size" == 2558 jsonpath "$.result.resources[4].annotations.priority" == 0 -jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" -jsonpath "$.result.resources[5].name" == "Sourcemeta One Directory Listing RPC Input" -jsonpath "$.result.resources[5].description" == "List the contents of a directory in the catalog" +jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" +jsonpath "$.result.resources[5].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[5].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[5].mimeType" == "application/schema+json" -jsonpath "$.result.resources[5].size" == 549 +jsonpath "$.result.resources[5].size" == 1589 jsonpath "$.result.resources[5].annotations.priority" == 0 -jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" -jsonpath "$.result.resources[6].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" +jsonpath "$.result.resources[6].name" == "Sourcemeta One Directory Listing RPC Input" jsonpath "$.result.resources[6].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[6].mimeType" == "application/schema+json" -jsonpath "$.result.resources[6].size" == 609 +jsonpath "$.result.resources[6].size" == 549 jsonpath "$.result.resources[6].annotations.priority" == 0 -jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" -jsonpath "$.result.resources[7].name" == "Sourcemeta One MCP Tools Call Request" -jsonpath "$.result.resources[7].description" == "Request from a client to invoke an MCP tool by name" +jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" +jsonpath "$.result.resources[7].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[7].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[7].mimeType" == "application/schema+json" -jsonpath "$.result.resources[7].size" == 1161 +jsonpath "$.result.resources[7].size" == 609 jsonpath "$.result.resources[7].annotations.priority" == 0 -jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" -jsonpath "$.result.resources[8].name" == "Sourcemeta One MCP Tools Call Response" -jsonpath "$.result.resources[8].description" == "Sourcemeta One's response to a tool invocation" +jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" +jsonpath "$.result.resources[8].name" == "Sourcemeta One MCP Tools Call Request" +jsonpath "$.result.resources[8].description" == "Request from a client to invoke an MCP tool by name" jsonpath "$.result.resources[8].mimeType" == "application/schema+json" -jsonpath "$.result.resources[8].size" == 4668 +jsonpath "$.result.resources[8].size" == 1161 jsonpath "$.result.resources[8].annotations.priority" == 0 -jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" -jsonpath "$.result.resources[9].name" == "Sourcemeta One Schema Search RPC Input" -jsonpath "$.result.resources[9].description" == "Search for schemas in the catalog by query term" +jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" +jsonpath "$.result.resources[9].name" == "Sourcemeta One MCP Tools Call Response" +jsonpath "$.result.resources[9].description" == "Sourcemeta One's response to a tool invocation" jsonpath "$.result.resources[9].mimeType" == "application/schema+json" -jsonpath "$.result.resources[9].size" == 2155 +jsonpath "$.result.resources[9].size" == 4668 jsonpath "$.result.resources[9].annotations.priority" == 0 -jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" -jsonpath "$.result.resources[10].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" +jsonpath "$.result.resources[10].name" == "Sourcemeta One Schema Search RPC Input" jsonpath "$.result.resources[10].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[10].mimeType" == "application/schema+json" -jsonpath "$.result.resources[10].size" == 777 +jsonpath "$.result.resources[10].size" == 2155 jsonpath "$.result.resources[10].annotations.priority" == 0 -jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" -jsonpath "$.result.resources[11].name" == "Sourcemeta One Schema Trace RPC Input" -jsonpath "$.result.resources[11].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" +jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" +jsonpath "$.result.resources[11].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[11].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[11].mimeType" == "application/schema+json" -jsonpath "$.result.resources[11].size" == 1735 +jsonpath "$.result.resources[11].size" == 777 jsonpath "$.result.resources[11].annotations.priority" == 0 -jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" -jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" +jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Trace RPC Input" jsonpath "$.result.resources[12].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[12].mimeType" == "application/schema+json" -jsonpath "$.result.resources[12].size" == 497 +jsonpath "$.result.resources[12].size" == 1735 jsonpath "$.result.resources[12].annotations.priority" == 0 -jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" -jsonpath "$.result.resources[13].name" == "Sourcemeta One MCP Tools List Request" -jsonpath "$.result.resources[13].description" == "Request from a client to list MCP tools" +jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" +jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[13].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[13].mimeType" == "application/schema+json" -jsonpath "$.result.resources[13].size" == 853 +jsonpath "$.result.resources[13].size" == 497 jsonpath "$.result.resources[13].annotations.priority" == 0 +jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" +jsonpath "$.result.resources[14].name" == "Sourcemeta One MCP Tools List Request" +jsonpath "$.result.resources[14].description" == "Request from a client to list MCP tools" +jsonpath "$.result.resources[14].mimeType" == "application/schema+json" +jsonpath "$.result.resources[14].size" == 853 +jsonpath "$.result.resources[14].annotations.priority" == 0 +jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/response" +jsonpath "$.result.resources[15].name" == "Sourcemeta One MCP Tools List Response" +jsonpath "$.result.resources[15].description" == "Sourcemeta One's list of MCP tools" +jsonpath "$.result.resources[15].mimeType" == "application/schema+json" +jsonpath "$.result.resources[15].size" == 4495 +jsonpath "$.result.resources[15].annotations.priority" == 0 +jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/request" +jsonpath "$.result.resources[16].name" == "Sourcemeta One Playground Schema Trace API Request" +jsonpath "$.result.resources[16].description" == "A JSON instance and the schema to trace its evaluation against" +jsonpath "$.result.resources[16].mimeType" == "application/schema+json" +jsonpath "$.result.resources[16].size" == 1124 +jsonpath "$.result.resources[16].annotations.priority" == 0 # The primary key adds the `/private` and `/reports` schemas, which sort # ahead of the public ones, on top of everything the anonymous caller sees. @@ -498,7 +516,7 @@ jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/api/error" jsonpath "$.result.resources[6].name" == "Sourcemeta One API Error" jsonpath "$.result.resources[6].description" == "The error response format returned by the Sourcemeta One API endpoints" jsonpath "$.result.resources[6].mimeType" == "application/schema+json" -jsonpath "$.result.resources[6].size" == 9525 +jsonpath "$.result.resources[6].size" == 11208 jsonpath "$.result.resources[6].annotations.priority" == 0 jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/api/list/response" jsonpath "$.result.resources[7].name" == "Sourcemeta One List API Response" @@ -506,257 +524,257 @@ jsonpath "$.result.resources[7].description" == "The response format for the dir jsonpath "$.result.resources[7].mimeType" == "application/schema+json" jsonpath "$.result.resources[7].size" == 3878 jsonpath "$.result.resources[7].annotations.priority" == 0 -jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response" -jsonpath "$.result.resources[8].name" == "Sourcemeta One Schema Dependencies API Response" -jsonpath "$.result.resources[8].description" == "The response format for the schema dependencies API endpoint" +jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/response" +jsonpath "$.result.resources[8].name" == "Sourcemeta One Playground Schema Trace API Response" +jsonpath "$.result.resources[8].description" == "The response format for tracing evaluation against a schema supplied in the request, which is what tracing against a schema in the catalog returns" jsonpath "$.result.resources[8].mimeType" == "application/schema+json" -jsonpath "$.result.resources[8].size" == 992 +jsonpath "$.result.resources[8].size" == 501 jsonpath "$.result.resources[8].annotations.priority" == 0 -jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/api/schemas/dependents/response" -jsonpath "$.result.resources[9].name" == "Sourcemeta One Schema Dependents API Response" -jsonpath "$.result.resources[9].description" == "The response format for the schema dependents API endpoint" +jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response" +jsonpath "$.result.resources[9].name" == "Sourcemeta One Schema Dependencies API Response" +jsonpath "$.result.resources[9].description" == "The response format for the schema dependencies API endpoint" jsonpath "$.result.resources[9].mimeType" == "application/schema+json" -jsonpath "$.result.resources[9].size" == 986 +jsonpath "$.result.resources[9].size" == 992 jsonpath "$.result.resources[9].annotations.priority" == 0 -jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/request" -jsonpath "$.result.resources[10].name" == "Sourcemeta One Schema Evaluate API Request" -jsonpath "$.result.resources[10].description" == "The JSON instance to validate against a schema in the catalog" +jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/api/schemas/dependents/response" +jsonpath "$.result.resources[10].name" == "Sourcemeta One Schema Dependents API Response" +jsonpath "$.result.resources[10].description" == "The response format for the schema dependents API endpoint" jsonpath "$.result.resources[10].mimeType" == "application/schema+json" -jsonpath "$.result.resources[10].size" == 417 +jsonpath "$.result.resources[10].size" == 986 jsonpath "$.result.resources[10].annotations.priority" == 0 -jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response" -jsonpath "$.result.resources[11].name" == "Sourcemeta One Schema Evaluate API Response" -jsonpath "$.result.resources[11].description" == "The response format for the schema evaluation API endpoint" +jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/request" +jsonpath "$.result.resources[11].name" == "Sourcemeta One Schema Evaluate API Request" +jsonpath "$.result.resources[11].description" == "The JSON instance to validate against a schema in the catalog" jsonpath "$.result.resources[11].mimeType" == "application/schema+json" -jsonpath "$.result.resources[11].size" == 2138 +jsonpath "$.result.resources[11].size" == 417 jsonpath "$.result.resources[11].annotations.priority" == 0 -jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/api/schemas/health/response" -jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Health API Response" -jsonpath "$.result.resources[12].description" == "The response format for the schema health API endpoint" +jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response" +jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Evaluate API Response" +jsonpath "$.result.resources[12].description" == "The response format for the schema evaluation API endpoint" jsonpath "$.result.resources[12].mimeType" == "application/schema+json" -jsonpath "$.result.resources[12].size" == 1584 +jsonpath "$.result.resources[12].size" == 2138 jsonpath "$.result.resources[12].annotations.priority" == 0 -jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/api/schemas/locations/response" -jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Locations API Response" -jsonpath "$.result.resources[13].description" == "The response format for the schema frame locations API endpoint" +jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/api/schemas/health/response" +jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Health API Response" +jsonpath "$.result.resources[13].description" == "The response format for the schema health API endpoint" jsonpath "$.result.resources[13].mimeType" == "application/schema+json" -jsonpath "$.result.resources[13].size" == 2391 +jsonpath "$.result.resources[13].size" == 1584 jsonpath "$.result.resources[13].annotations.priority" == 0 -jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/api/schemas/metadata/response" -jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Metadata API Response" -jsonpath "$.result.resources[14].description" == "The response format for the schema metadata API endpoint" +jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/api/schemas/locations/response" +jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Locations API Response" +jsonpath "$.result.resources[14].description" == "The response format for the schema frame locations API endpoint" jsonpath "$.result.resources[14].mimeType" == "application/schema+json" -jsonpath "$.result.resources[14].size" == 2943 +jsonpath "$.result.resources[14].size" == 2391 jsonpath "$.result.resources[14].annotations.priority" == 0 -jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/api/schemas/output-error" -jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Output Error" -jsonpath "$.result.resources[15].description" == "A single entry of the standard JSON Schema output format that describes why an instance does not conform to a schema" +jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/api/schemas/metadata/response" +jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Metadata API Response" +jsonpath "$.result.resources[15].description" == "The response format for the schema metadata API endpoint" jsonpath "$.result.resources[15].mimeType" == "application/schema+json" -jsonpath "$.result.resources[15].size" == 1143 +jsonpath "$.result.resources[15].size" == 2943 jsonpath "$.result.resources[15].annotations.priority" == 0 -jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/api/schemas/position" -jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema Position" -jsonpath "$.result.resources[16].description" == "Represents a position in a JSON document as line start, column start, line end, and column end" +jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/api/schemas/output-error" +jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema Output Error" +jsonpath "$.result.resources[16].description" == "A single entry of the standard JSON Schema output format that describes why an instance does not conform to a schema" jsonpath "$.result.resources[16].mimeType" == "application/schema+json" -jsonpath "$.result.resources[16].size" == 446 +jsonpath "$.result.resources[16].size" == 1143 jsonpath "$.result.resources[16].annotations.priority" == 0 -jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/api/schemas/positions/response" -jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema Positions API Response" -jsonpath "$.result.resources[17].description" == "The response format for the schema positions API endpoint" +jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/api/schemas/position" +jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema Position" +jsonpath "$.result.resources[17].description" == "Represents a position in a JSON document as line start, column start, line end, and column end" jsonpath "$.result.resources[17].mimeType" == "application/schema+json" -jsonpath "$.result.resources[17].size" == 435 +jsonpath "$.result.resources[17].size" == 446 jsonpath "$.result.resources[17].annotations.priority" == 0 -jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/request" -jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema RDF API Request" -jsonpath "$.result.resources[18].description" == "The JSON instance to promote to JSON-LD against a schema in the catalog, along with the desired output form" +jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/api/schemas/positions/response" +jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema Positions API Response" +jsonpath "$.result.resources[18].description" == "The response format for the schema positions API endpoint" jsonpath "$.result.resources[18].mimeType" == "application/schema+json" -jsonpath "$.result.resources[18].size" == 1422 +jsonpath "$.result.resources[18].size" == 435 jsonpath "$.result.resources[18].annotations.priority" == 0 -jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/response" -jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema RDF API Response" -jsonpath "$.result.resources[19].description" == "The instance promoted to JSON-LD, in expanded, flattened, or compacted form" +jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/request" +jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema RDF API Request" +jsonpath "$.result.resources[19].description" == "The JSON instance to promote to JSON-LD against a schema in the catalog, along with the desired output form" jsonpath "$.result.resources[19].mimeType" == "application/schema+json" -jsonpath "$.result.resources[19].size" == 799 +jsonpath "$.result.resources[19].size" == 1422 jsonpath "$.result.resources[19].annotations.priority" == 0 -jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/api/schemas/search/response" -jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Search API Response" -jsonpath "$.result.resources[20].description" == "The response format for the schema search API endpoint" +jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/response" +jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema RDF API Response" +jsonpath "$.result.resources[20].description" == "The instance promoted to JSON-LD, in expanded, flattened, or compacted form" jsonpath "$.result.resources[20].mimeType" == "application/schema+json" -jsonpath "$.result.resources[20].size" == 1341 +jsonpath "$.result.resources[20].size" == 799 jsonpath "$.result.resources[20].annotations.priority" == 0 -jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/api/schemas/stats/response" -jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Stats API Response" -jsonpath "$.result.resources[21].description" == "The response format for the schema statistics API endpoint" +jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/api/schemas/search/response" +jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Search API Response" +jsonpath "$.result.resources[21].description" == "The response format for the schema search API endpoint" jsonpath "$.result.resources[21].mimeType" == "application/schema+json" -jsonpath "$.result.resources[21].size" == 2345 +jsonpath "$.result.resources[21].size" == 1341 jsonpath "$.result.resources[21].annotations.priority" == 0 -jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/request" -jsonpath "$.result.resources[22].name" == "Sourcemeta One Schema Trace API Request" -jsonpath "$.result.resources[22].description" == "The JSON instance to trace evaluation against a schema in the catalog" +jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/api/schemas/stats/response" +jsonpath "$.result.resources[22].name" == "Sourcemeta One Schema Stats API Response" +jsonpath "$.result.resources[22].description" == "The response format for the schema statistics API endpoint" jsonpath "$.result.resources[22].mimeType" == "application/schema+json" -jsonpath "$.result.resources[22].size" == 419 +jsonpath "$.result.resources[22].size" == 2345 jsonpath "$.result.resources[22].annotations.priority" == 0 -jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/response" -jsonpath "$.result.resources[23].name" == "Sourcemeta One Schema Trace API Response" -jsonpath "$.result.resources[23].description" == "The response format for the schema trace API endpoint" +jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/request" +jsonpath "$.result.resources[23].name" == "Sourcemeta One Schema Trace API Request" +jsonpath "$.result.resources[23].description" == "The JSON instance to trace evaluation against a schema in the catalog" jsonpath "$.result.resources[23].mimeType" == "application/schema+json" -jsonpath "$.result.resources[23].size" == 2118 +jsonpath "$.result.resources[23].size" == 419 jsonpath "$.result.resources[23].annotations.priority" == 0 -jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/error" -jsonpath "$.result.resources[24].name" == "Sourcemeta One MCP Error Response" -jsonpath "$.result.resources[24].description" == "The error response Sourcemeta One returns when an MCP request fails" +jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/response" +jsonpath "$.result.resources[24].name" == "Sourcemeta One Schema Trace API Response" +jsonpath "$.result.resources[24].description" == "The response format for the schema trace API endpoint" jsonpath "$.result.resources[24].mimeType" == "application/schema+json" -jsonpath "$.result.resources[24].size" == 5860 +jsonpath "$.result.resources[24].size" == 2290 jsonpath "$.result.resources[24].annotations.priority" == 0 -jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/initialize/request" -jsonpath "$.result.resources[25].name" == "Sourcemeta One MCP Initialize Request" -jsonpath "$.result.resources[25].description" == "Connection handshake from a client" +jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/error" +jsonpath "$.result.resources[25].name" == "Sourcemeta One MCP Error Response" +jsonpath "$.result.resources[25].description" == "The error response Sourcemeta One returns when an MCP request fails" jsonpath "$.result.resources[25].mimeType" == "application/schema+json" -jsonpath "$.result.resources[25].size" == 4617 +jsonpath "$.result.resources[25].size" == 5860 jsonpath "$.result.resources[25].annotations.priority" == 0 -jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/initialize/response" -jsonpath "$.result.resources[26].name" == "Sourcemeta One MCP Initialize Response" -jsonpath "$.result.resources[26].description" == "Sourcemeta One's response to a client's initialization" +jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/initialize/request" +jsonpath "$.result.resources[26].name" == "Sourcemeta One MCP Initialize Request" +jsonpath "$.result.resources[26].description" == "Connection handshake from a client" jsonpath "$.result.resources[26].mimeType" == "application/schema+json" -jsonpath "$.result.resources[26].size" == 2524 +jsonpath "$.result.resources[26].size" == 4617 jsonpath "$.result.resources[26].annotations.priority" == 0 -jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" -jsonpath "$.result.resources[27].name" == "Sourcemeta One MCP Cancelled Notification" -jsonpath "$.result.resources[27].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" +jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/initialize/response" +jsonpath "$.result.resources[27].name" == "Sourcemeta One MCP Initialize Response" +jsonpath "$.result.resources[27].description" == "Sourcemeta One's response to a client's initialization" jsonpath "$.result.resources[27].mimeType" == "application/schema+json" -jsonpath "$.result.resources[27].size" == 1163 +jsonpath "$.result.resources[27].size" == 2524 jsonpath "$.result.resources[27].annotations.priority" == 0 -jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" -jsonpath "$.result.resources[28].name" == "Sourcemeta One MCP Initialized Notification" -jsonpath "$.result.resources[28].description" == "Client signal that the handshake is complete and normal operation may begin" +jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" +jsonpath "$.result.resources[28].name" == "Sourcemeta One MCP Cancelled Notification" +jsonpath "$.result.resources[28].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" jsonpath "$.result.resources[28].mimeType" == "application/schema+json" -jsonpath "$.result.resources[28].size" == 740 +jsonpath "$.result.resources[28].size" == 1163 jsonpath "$.result.resources[28].annotations.priority" == 0 -jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" -jsonpath "$.result.resources[29].name" == "Sourcemeta One MCP Ping Request" -jsonpath "$.result.resources[29].description" == "Liveness check from a client" +jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" +jsonpath "$.result.resources[29].name" == "Sourcemeta One MCP Initialized Notification" +jsonpath "$.result.resources[29].description" == "Client signal that the handshake is complete and normal operation may begin" jsonpath "$.result.resources[29].mimeType" == "application/schema+json" -jsonpath "$.result.resources[29].size" == 695 +jsonpath "$.result.resources[29].size" == 740 jsonpath "$.result.resources[29].annotations.priority" == 0 -jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" -jsonpath "$.result.resources[30].name" == "Sourcemeta One MCP Ping Response" -jsonpath "$.result.resources[30].description" == "Sourcemeta One's response to a liveness check" +jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" +jsonpath "$.result.resources[30].name" == "Sourcemeta One MCP Ping Request" +jsonpath "$.result.resources[30].description" == "Liveness check from a client" jsonpath "$.result.resources[30].mimeType" == "application/schema+json" -jsonpath "$.result.resources[30].size" == 598 +jsonpath "$.result.resources[30].size" == 695 jsonpath "$.result.resources[30].annotations.priority" == 0 -jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" -jsonpath "$.result.resources[31].name" == "Sourcemeta One MCP Protected Resource Metadata Response" -jsonpath "$.result.resources[31].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" +jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" +jsonpath "$.result.resources[31].name" == "Sourcemeta One MCP Ping Response" +jsonpath "$.result.resources[31].description" == "Sourcemeta One's response to a liveness check" jsonpath "$.result.resources[31].mimeType" == "application/schema+json" -jsonpath "$.result.resources[31].size" == 2176 +jsonpath "$.result.resources[31].size" == 598 jsonpath "$.result.resources[31].annotations.priority" == 0 -jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/request" -jsonpath "$.result.resources[32].name" == "Sourcemeta One MCP Request" -jsonpath "$.result.resources[32].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" +jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" +jsonpath "$.result.resources[32].name" == "Sourcemeta One MCP Protected Resource Metadata Response" +jsonpath "$.result.resources[32].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" jsonpath "$.result.resources[32].mimeType" == "application/schema+json" -jsonpath "$.result.resources[32].size" == 2520 +jsonpath "$.result.resources[32].size" == 2176 jsonpath "$.result.resources[32].annotations.priority" == 0 -jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" -jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Resources List Request" -jsonpath "$.result.resources[33].description" == "Request from a client to list MCP resources" +jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/request" +jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Request" +jsonpath "$.result.resources[33].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" jsonpath "$.result.resources[33].mimeType" == "application/schema+json" -jsonpath "$.result.resources[33].size" == 1071 +jsonpath "$.result.resources[33].size" == 2520 jsonpath "$.result.resources[33].annotations.priority" == 0 -jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" -jsonpath "$.result.resources[34].name" == "Sourcemeta One MCP Resources List Response" -jsonpath "$.result.resources[34].description" == "Sourcemeta One's list of MCP resources" +jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" +jsonpath "$.result.resources[34].name" == "Sourcemeta One MCP Resources List Request" +jsonpath "$.result.resources[34].description" == "Request from a client to list MCP resources" jsonpath "$.result.resources[34].mimeType" == "application/schema+json" -jsonpath "$.result.resources[34].size" == 3062 +jsonpath "$.result.resources[34].size" == 1071 jsonpath "$.result.resources[34].annotations.priority" == 0 -jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" -jsonpath "$.result.resources[35].name" == "Sourcemeta One MCP Resources Read Request" -jsonpath "$.result.resources[35].description" == "Request from a client to read an MCP resource" +jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" +jsonpath "$.result.resources[35].name" == "Sourcemeta One MCP Resources List Response" +jsonpath "$.result.resources[35].description" == "Sourcemeta One's list of MCP resources" jsonpath "$.result.resources[35].mimeType" == "application/schema+json" -jsonpath "$.result.resources[35].size" == 1293 +jsonpath "$.result.resources[35].size" == 3062 jsonpath "$.result.resources[35].annotations.priority" == 0 -jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" -jsonpath "$.result.resources[36].name" == "Sourcemeta One MCP Resources Read Response" -jsonpath "$.result.resources[36].description" == "Sourcemeta One's response containing an MCP resource" +jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" +jsonpath "$.result.resources[36].name" == "Sourcemeta One MCP Resources Read Request" +jsonpath "$.result.resources[36].description" == "Request from a client to read an MCP resource" jsonpath "$.result.resources[36].mimeType" == "application/schema+json" -jsonpath "$.result.resources[36].size" == 1754 +jsonpath "$.result.resources[36].size" == 1293 jsonpath "$.result.resources[36].annotations.priority" == 0 -jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" -jsonpath "$.result.resources[37].name" == "Sourcemeta One MCP Resources Templates List Request" -jsonpath "$.result.resources[37].description" == "Request from a client to list MCP resource templates" +jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" +jsonpath "$.result.resources[37].name" == "Sourcemeta One MCP Resources Read Response" +jsonpath "$.result.resources[37].description" == "Sourcemeta One's response containing an MCP resource" jsonpath "$.result.resources[37].mimeType" == "application/schema+json" -jsonpath "$.result.resources[37].size" == 922 +jsonpath "$.result.resources[37].size" == 1754 jsonpath "$.result.resources[37].annotations.priority" == 0 -jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" -jsonpath "$.result.resources[38].name" == "Sourcemeta One MCP Resources Templates List Response" -jsonpath "$.result.resources[38].description" == "Sourcemeta One's list of MCP resource templates" +jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" +jsonpath "$.result.resources[38].name" == "Sourcemeta One MCP Resources Templates List Request" +jsonpath "$.result.resources[38].description" == "Request from a client to list MCP resource templates" jsonpath "$.result.resources[38].mimeType" == "application/schema+json" -jsonpath "$.result.resources[38].size" == 2927 +jsonpath "$.result.resources[38].size" == 922 jsonpath "$.result.resources[38].annotations.priority" == 0 -jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/response" -jsonpath "$.result.resources[39].name" == "Sourcemeta One MCP Response" -jsonpath "$.result.resources[39].description" == "Any outgoing MCP response the server returns" +jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" +jsonpath "$.result.resources[39].name" == "Sourcemeta One MCP Resources Templates List Response" +jsonpath "$.result.resources[39].description" == "Sourcemeta One's list of MCP resource templates" jsonpath "$.result.resources[39].mimeType" == "application/schema+json" -jsonpath "$.result.resources[39].size" == 4799 +jsonpath "$.result.resources[39].size" == 2927 jsonpath "$.result.resources[39].annotations.priority" == 0 -jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" -jsonpath "$.result.resources[40].name" == "Sourcemeta One Schema Evaluate RPC Input" -jsonpath "$.result.resources[40].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" +jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/mcp/response" +jsonpath "$.result.resources[40].name" == "Sourcemeta One MCP Response" +jsonpath "$.result.resources[40].description" == "Any outgoing MCP response the server returns" jsonpath "$.result.resources[40].mimeType" == "application/schema+json" -jsonpath "$.result.resources[40].size" == 1566 +jsonpath "$.result.resources[40].size" == 4799 jsonpath "$.result.resources[40].annotations.priority" == 0 -jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" -jsonpath "$.result.resources[41].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" +jsonpath "$.result.resources[41].name" == "Sourcemeta One Schema Evaluate RPC Input" jsonpath "$.result.resources[41].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[41].mimeType" == "application/schema+json" -jsonpath "$.result.resources[41].size" == 441 +jsonpath "$.result.resources[41].size" == 1566 jsonpath "$.result.resources[41].annotations.priority" == 0 -jsonpath "$.result.resources[42].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" -jsonpath "$.result.resources[42].name" == "Sourcemeta One Schema Dependencies RPC Input" -jsonpath "$.result.resources[42].description" == "Get all direct and indirect dependencies of a schema in the catalog" +jsonpath "$.result.resources[42].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" +jsonpath "$.result.resources[42].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[42].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[42].mimeType" == "application/schema+json" -jsonpath "$.result.resources[42].size" == 687 +jsonpath "$.result.resources[42].size" == 441 jsonpath "$.result.resources[42].annotations.priority" == 0 -jsonpath "$.result.resources[43].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" -jsonpath "$.result.resources[43].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[43].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" +jsonpath "$.result.resources[43].name" == "Sourcemeta One Schema Dependencies RPC Input" jsonpath "$.result.resources[43].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[43].mimeType" == "application/schema+json" -jsonpath "$.result.resources[43].size" == 741 +jsonpath "$.result.resources[43].size" == 687 jsonpath "$.result.resources[43].annotations.priority" == 0 -jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" -jsonpath "$.result.resources[44].name" == "Sourcemeta One Schema Dependents RPC Input" -jsonpath "$.result.resources[44].description" == "Get all direct and transitive dependents of a schema in the catalog" +jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" +jsonpath "$.result.resources[44].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[44].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[44].mimeType" == "application/schema+json" -jsonpath "$.result.resources[44].size" == 683 +jsonpath "$.result.resources[44].size" == 741 jsonpath "$.result.resources[44].annotations.priority" == 0 -jsonpath "$.result.resources[45].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" -jsonpath "$.result.resources[45].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[45].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" +jsonpath "$.result.resources[45].name" == "Sourcemeta One Schema Dependents RPC Input" jsonpath "$.result.resources[45].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[45].mimeType" == "application/schema+json" -jsonpath "$.result.resources[45].size" == 735 +jsonpath "$.result.resources[45].size" == 683 jsonpath "$.result.resources[45].annotations.priority" == 0 -jsonpath "$.result.resources[46].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" -jsonpath "$.result.resources[46].name" == "Sourcemeta One Schema Health RPC Input" -jsonpath "$.result.resources[46].description" == "Get the health analysis and score of a schema in the catalog" +jsonpath "$.result.resources[46].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" +jsonpath "$.result.resources[46].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[46].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[46].mimeType" == "application/schema+json" -jsonpath "$.result.resources[46].size" == 668 +jsonpath "$.result.resources[46].size" == 735 jsonpath "$.result.resources[46].annotations.priority" == 0 -jsonpath "$.result.resources[47].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" -jsonpath "$.result.resources[47].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[47].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" +jsonpath "$.result.resources[47].name" == "Sourcemeta One Schema Health RPC Input" jsonpath "$.result.resources[47].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[47].mimeType" == "application/schema+json" -jsonpath "$.result.resources[47].size" == 415 +jsonpath "$.result.resources[47].size" == 668 jsonpath "$.result.resources[47].annotations.priority" == 0 -jsonpath "$.result.resources[48].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" -jsonpath "$.result.resources[48].name" == "Sourcemeta One Schema Locations RPC Input" -jsonpath "$.result.resources[48].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" +jsonpath "$.result.resources[48].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" +jsonpath "$.result.resources[48].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[48].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[48].mimeType" == "application/schema+json" -jsonpath "$.result.resources[48].size" == 720 +jsonpath "$.result.resources[48].size" == 415 jsonpath "$.result.resources[48].annotations.priority" == 0 -jsonpath "$.result.resources[49].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" -jsonpath "$.result.resources[49].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[49].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" +jsonpath "$.result.resources[49].name" == "Sourcemeta One Schema Locations RPC Input" jsonpath "$.result.resources[49].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[49].mimeType" == "application/schema+json" -jsonpath "$.result.resources[49].size" == 471 +jsonpath "$.result.resources[49].size" == 720 jsonpath "$.result.resources[49].annotations.priority" == 0 # The primary key's second page. @@ -778,110 +796,128 @@ Content-Type: application/json [Asserts] jsonpath "$.jsonrpc" == "2.0" jsonpath "$.id" == 4 -jsonpath "$.result.resources" count == 18 +jsonpath "$.result.resources" count == 20 jsonpath "$.result.nextCursor" not exists -jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" -jsonpath "$.result.resources[0].name" == "Sourcemeta One Schema Metadata RPC Input" -jsonpath "$.result.resources[0].description" == "Get metadata information about a schema in the catalog" +jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" +jsonpath "$.result.resources[0].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[0].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[0].mimeType" == "application/schema+json" -jsonpath "$.result.resources[0].size" == 666 +jsonpath "$.result.resources[0].size" == 471 jsonpath "$.result.resources[0].annotations.priority" == 0 -jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" -jsonpath "$.result.resources[1].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" +jsonpath "$.result.resources[1].name" == "Sourcemeta One Schema Metadata RPC Input" jsonpath "$.result.resources[1].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[1].mimeType" == "application/schema+json" -jsonpath "$.result.resources[1].size" == 843 +jsonpath "$.result.resources[1].size" == 666 jsonpath "$.result.resources[1].annotations.priority" == 0 -jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" -jsonpath "$.result.resources[2].name" == "Sourcemeta One Schema Positions RPC Input" -jsonpath "$.result.resources[2].description" == "Get line and column position information for every token in a schema" +jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" +jsonpath "$.result.resources[2].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[2].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[2].mimeType" == "application/schema+json" -jsonpath "$.result.resources[2].size" == 682 +jsonpath "$.result.resources[2].size" == 843 jsonpath "$.result.resources[2].annotations.priority" == 0 -jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" -jsonpath "$.result.resources[3].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" +jsonpath "$.result.resources[3].name" == "Sourcemeta One Schema Positions RPC Input" jsonpath "$.result.resources[3].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[3].mimeType" == "application/schema+json" -jsonpath "$.result.resources[3].size" == 435 +jsonpath "$.result.resources[3].size" == 682 jsonpath "$.result.resources[3].annotations.priority" == 0 -jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" -jsonpath "$.result.resources[4].name" == "Sourcemeta One Schema Statistics RPC Input" -jsonpath "$.result.resources[4].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" +jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" +jsonpath "$.result.resources[4].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[4].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[4].mimeType" == "application/schema+json" -jsonpath "$.result.resources[4].size" == 703 +jsonpath "$.result.resources[4].size" == 435 jsonpath "$.result.resources[4].annotations.priority" == 0 -jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" -jsonpath "$.result.resources[5].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" +jsonpath "$.result.resources[5].name" == "Sourcemeta One Schema Statistics RPC Input" jsonpath "$.result.resources[5].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[5].mimeType" == "application/schema+json" -jsonpath "$.result.resources[5].size" == 709 +jsonpath "$.result.resources[5].size" == 703 jsonpath "$.result.resources[5].annotations.priority" == 0 -jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" -jsonpath "$.result.resources[6].name" == "Sourcemeta One Schema RDF RPC Input" -jsonpath "$.result.resources[6].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" +jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" +jsonpath "$.result.resources[6].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[6].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[6].mimeType" == "application/schema+json" -jsonpath "$.result.resources[6].size" == 2558 +jsonpath "$.result.resources[6].size" == 709 jsonpath "$.result.resources[6].annotations.priority" == 0 -jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" -jsonpath "$.result.resources[7].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" +jsonpath "$.result.resources[7].name" == "Sourcemeta One Schema RDF RPC Input" jsonpath "$.result.resources[7].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[7].mimeType" == "application/schema+json" -jsonpath "$.result.resources[7].size" == 1589 +jsonpath "$.result.resources[7].size" == 2558 jsonpath "$.result.resources[7].annotations.priority" == 0 -jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" -jsonpath "$.result.resources[8].name" == "Sourcemeta One Directory Listing RPC Input" -jsonpath "$.result.resources[8].description" == "List the contents of a directory in the catalog" +jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" +jsonpath "$.result.resources[8].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[8].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[8].mimeType" == "application/schema+json" -jsonpath "$.result.resources[8].size" == 549 +jsonpath "$.result.resources[8].size" == 1589 jsonpath "$.result.resources[8].annotations.priority" == 0 -jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" -jsonpath "$.result.resources[9].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" +jsonpath "$.result.resources[9].name" == "Sourcemeta One Directory Listing RPC Input" jsonpath "$.result.resources[9].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[9].mimeType" == "application/schema+json" -jsonpath "$.result.resources[9].size" == 609 +jsonpath "$.result.resources[9].size" == 549 jsonpath "$.result.resources[9].annotations.priority" == 0 -jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" -jsonpath "$.result.resources[10].name" == "Sourcemeta One MCP Tools Call Request" -jsonpath "$.result.resources[10].description" == "Request from a client to invoke an MCP tool by name" +jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" +jsonpath "$.result.resources[10].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[10].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[10].mimeType" == "application/schema+json" -jsonpath "$.result.resources[10].size" == 1161 +jsonpath "$.result.resources[10].size" == 609 jsonpath "$.result.resources[10].annotations.priority" == 0 -jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" -jsonpath "$.result.resources[11].name" == "Sourcemeta One MCP Tools Call Response" -jsonpath "$.result.resources[11].description" == "Sourcemeta One's response to a tool invocation" +jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" +jsonpath "$.result.resources[11].name" == "Sourcemeta One MCP Tools Call Request" +jsonpath "$.result.resources[11].description" == "Request from a client to invoke an MCP tool by name" jsonpath "$.result.resources[11].mimeType" == "application/schema+json" -jsonpath "$.result.resources[11].size" == 4668 +jsonpath "$.result.resources[11].size" == 1161 jsonpath "$.result.resources[11].annotations.priority" == 0 -jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" -jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Search RPC Input" -jsonpath "$.result.resources[12].description" == "Search for schemas in the catalog by query term" +jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" +jsonpath "$.result.resources[12].name" == "Sourcemeta One MCP Tools Call Response" +jsonpath "$.result.resources[12].description" == "Sourcemeta One's response to a tool invocation" jsonpath "$.result.resources[12].mimeType" == "application/schema+json" -jsonpath "$.result.resources[12].size" == 2155 +jsonpath "$.result.resources[12].size" == 4668 jsonpath "$.result.resources[12].annotations.priority" == 0 -jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" -jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" +jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Search RPC Input" jsonpath "$.result.resources[13].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[13].mimeType" == "application/schema+json" -jsonpath "$.result.resources[13].size" == 777 +jsonpath "$.result.resources[13].size" == 2155 jsonpath "$.result.resources[13].annotations.priority" == 0 -jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" -jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Trace RPC Input" -jsonpath "$.result.resources[14].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" +jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" +jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[14].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[14].mimeType" == "application/schema+json" -jsonpath "$.result.resources[14].size" == 1735 +jsonpath "$.result.resources[14].size" == 777 jsonpath "$.result.resources[14].annotations.priority" == 0 -jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" -jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" +jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Trace RPC Input" jsonpath "$.result.resources[15].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[15].mimeType" == "application/schema+json" -jsonpath "$.result.resources[15].size" == 497 +jsonpath "$.result.resources[15].size" == 1735 jsonpath "$.result.resources[15].annotations.priority" == 0 -jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" -jsonpath "$.result.resources[16].name" == "Sourcemeta One MCP Tools List Request" -jsonpath "$.result.resources[16].description" == "Request from a client to list MCP tools" +jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" +jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[16].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[16].mimeType" == "application/schema+json" -jsonpath "$.result.resources[16].size" == 853 +jsonpath "$.result.resources[16].size" == 497 jsonpath "$.result.resources[16].annotations.priority" == 0 +jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" +jsonpath "$.result.resources[17].name" == "Sourcemeta One MCP Tools List Request" +jsonpath "$.result.resources[17].description" == "Request from a client to list MCP tools" +jsonpath "$.result.resources[17].mimeType" == "application/schema+json" +jsonpath "$.result.resources[17].size" == 853 +jsonpath "$.result.resources[17].annotations.priority" == 0 +jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/response" +jsonpath "$.result.resources[18].name" == "Sourcemeta One MCP Tools List Response" +jsonpath "$.result.resources[18].description" == "Sourcemeta One's list of MCP tools" +jsonpath "$.result.resources[18].mimeType" == "application/schema+json" +jsonpath "$.result.resources[18].size" == 4495 +jsonpath "$.result.resources[18].annotations.priority" == 0 +jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/request" +jsonpath "$.result.resources[19].name" == "Sourcemeta One Playground Schema Trace API Request" +jsonpath "$.result.resources[19].description" == "A JSON instance and the schema to trace its evaluation against" +jsonpath "$.result.resources[19].mimeType" == "application/schema+json" +jsonpath "$.result.resources[19].size" == 1124 +jsonpath "$.result.resources[19].annotations.priority" == 0 # The internal key adds only the `/internal` schema; the `/private` and # `/reports` schemas stay hidden. @@ -929,7 +965,7 @@ jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/api/error" jsonpath "$.result.resources[4].name" == "Sourcemeta One API Error" jsonpath "$.result.resources[4].description" == "The error response format returned by the Sourcemeta One API endpoints" jsonpath "$.result.resources[4].mimeType" == "application/schema+json" -jsonpath "$.result.resources[4].size" == 9525 +jsonpath "$.result.resources[4].size" == 11208 jsonpath "$.result.resources[4].annotations.priority" == 0 jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/api/list/response" jsonpath "$.result.resources[5].name" == "Sourcemeta One List API Response" @@ -937,269 +973,269 @@ jsonpath "$.result.resources[5].description" == "The response format for the dir jsonpath "$.result.resources[5].mimeType" == "application/schema+json" jsonpath "$.result.resources[5].size" == 3878 jsonpath "$.result.resources[5].annotations.priority" == 0 -jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response" -jsonpath "$.result.resources[6].name" == "Sourcemeta One Schema Dependencies API Response" -jsonpath "$.result.resources[6].description" == "The response format for the schema dependencies API endpoint" +jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/response" +jsonpath "$.result.resources[6].name" == "Sourcemeta One Playground Schema Trace API Response" +jsonpath "$.result.resources[6].description" == "The response format for tracing evaluation against a schema supplied in the request, which is what tracing against a schema in the catalog returns" jsonpath "$.result.resources[6].mimeType" == "application/schema+json" -jsonpath "$.result.resources[6].size" == 992 +jsonpath "$.result.resources[6].size" == 501 jsonpath "$.result.resources[6].annotations.priority" == 0 -jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/api/schemas/dependents/response" -jsonpath "$.result.resources[7].name" == "Sourcemeta One Schema Dependents API Response" -jsonpath "$.result.resources[7].description" == "The response format for the schema dependents API endpoint" +jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response" +jsonpath "$.result.resources[7].name" == "Sourcemeta One Schema Dependencies API Response" +jsonpath "$.result.resources[7].description" == "The response format for the schema dependencies API endpoint" jsonpath "$.result.resources[7].mimeType" == "application/schema+json" -jsonpath "$.result.resources[7].size" == 986 +jsonpath "$.result.resources[7].size" == 992 jsonpath "$.result.resources[7].annotations.priority" == 0 -jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/request" -jsonpath "$.result.resources[8].name" == "Sourcemeta One Schema Evaluate API Request" -jsonpath "$.result.resources[8].description" == "The JSON instance to validate against a schema in the catalog" +jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/api/schemas/dependents/response" +jsonpath "$.result.resources[8].name" == "Sourcemeta One Schema Dependents API Response" +jsonpath "$.result.resources[8].description" == "The response format for the schema dependents API endpoint" jsonpath "$.result.resources[8].mimeType" == "application/schema+json" -jsonpath "$.result.resources[8].size" == 417 +jsonpath "$.result.resources[8].size" == 986 jsonpath "$.result.resources[8].annotations.priority" == 0 -jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response" -jsonpath "$.result.resources[9].name" == "Sourcemeta One Schema Evaluate API Response" -jsonpath "$.result.resources[9].description" == "The response format for the schema evaluation API endpoint" +jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/request" +jsonpath "$.result.resources[9].name" == "Sourcemeta One Schema Evaluate API Request" +jsonpath "$.result.resources[9].description" == "The JSON instance to validate against a schema in the catalog" jsonpath "$.result.resources[9].mimeType" == "application/schema+json" -jsonpath "$.result.resources[9].size" == 2138 +jsonpath "$.result.resources[9].size" == 417 jsonpath "$.result.resources[9].annotations.priority" == 0 -jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/api/schemas/health/response" -jsonpath "$.result.resources[10].name" == "Sourcemeta One Schema Health API Response" -jsonpath "$.result.resources[10].description" == "The response format for the schema health API endpoint" +jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response" +jsonpath "$.result.resources[10].name" == "Sourcemeta One Schema Evaluate API Response" +jsonpath "$.result.resources[10].description" == "The response format for the schema evaluation API endpoint" jsonpath "$.result.resources[10].mimeType" == "application/schema+json" -jsonpath "$.result.resources[10].size" == 1584 +jsonpath "$.result.resources[10].size" == 2138 jsonpath "$.result.resources[10].annotations.priority" == 0 -jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/api/schemas/locations/response" -jsonpath "$.result.resources[11].name" == "Sourcemeta One Schema Locations API Response" -jsonpath "$.result.resources[11].description" == "The response format for the schema frame locations API endpoint" +jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/api/schemas/health/response" +jsonpath "$.result.resources[11].name" == "Sourcemeta One Schema Health API Response" +jsonpath "$.result.resources[11].description" == "The response format for the schema health API endpoint" jsonpath "$.result.resources[11].mimeType" == "application/schema+json" -jsonpath "$.result.resources[11].size" == 2391 +jsonpath "$.result.resources[11].size" == 1584 jsonpath "$.result.resources[11].annotations.priority" == 0 -jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/api/schemas/metadata/response" -jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Metadata API Response" -jsonpath "$.result.resources[12].description" == "The response format for the schema metadata API endpoint" +jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/api/schemas/locations/response" +jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Locations API Response" +jsonpath "$.result.resources[12].description" == "The response format for the schema frame locations API endpoint" jsonpath "$.result.resources[12].mimeType" == "application/schema+json" -jsonpath "$.result.resources[12].size" == 2943 +jsonpath "$.result.resources[12].size" == 2391 jsonpath "$.result.resources[12].annotations.priority" == 0 -jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/api/schemas/output-error" -jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Output Error" -jsonpath "$.result.resources[13].description" == "A single entry of the standard JSON Schema output format that describes why an instance does not conform to a schema" +jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/api/schemas/metadata/response" +jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Metadata API Response" +jsonpath "$.result.resources[13].description" == "The response format for the schema metadata API endpoint" jsonpath "$.result.resources[13].mimeType" == "application/schema+json" -jsonpath "$.result.resources[13].size" == 1143 +jsonpath "$.result.resources[13].size" == 2943 jsonpath "$.result.resources[13].annotations.priority" == 0 -jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/api/schemas/position" -jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Position" -jsonpath "$.result.resources[14].description" == "Represents a position in a JSON document as line start, column start, line end, and column end" +jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/api/schemas/output-error" +jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Output Error" +jsonpath "$.result.resources[14].description" == "A single entry of the standard JSON Schema output format that describes why an instance does not conform to a schema" jsonpath "$.result.resources[14].mimeType" == "application/schema+json" -jsonpath "$.result.resources[14].size" == 446 +jsonpath "$.result.resources[14].size" == 1143 jsonpath "$.result.resources[14].annotations.priority" == 0 -jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/api/schemas/positions/response" -jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Positions API Response" -jsonpath "$.result.resources[15].description" == "The response format for the schema positions API endpoint" +jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/api/schemas/position" +jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Position" +jsonpath "$.result.resources[15].description" == "Represents a position in a JSON document as line start, column start, line end, and column end" jsonpath "$.result.resources[15].mimeType" == "application/schema+json" -jsonpath "$.result.resources[15].size" == 435 +jsonpath "$.result.resources[15].size" == 446 jsonpath "$.result.resources[15].annotations.priority" == 0 -jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/request" -jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema RDF API Request" -jsonpath "$.result.resources[16].description" == "The JSON instance to promote to JSON-LD against a schema in the catalog, along with the desired output form" +jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/api/schemas/positions/response" +jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema Positions API Response" +jsonpath "$.result.resources[16].description" == "The response format for the schema positions API endpoint" jsonpath "$.result.resources[16].mimeType" == "application/schema+json" -jsonpath "$.result.resources[16].size" == 1422 +jsonpath "$.result.resources[16].size" == 435 jsonpath "$.result.resources[16].annotations.priority" == 0 -jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/response" -jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema RDF API Response" -jsonpath "$.result.resources[17].description" == "The instance promoted to JSON-LD, in expanded, flattened, or compacted form" +jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/request" +jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema RDF API Request" +jsonpath "$.result.resources[17].description" == "The JSON instance to promote to JSON-LD against a schema in the catalog, along with the desired output form" jsonpath "$.result.resources[17].mimeType" == "application/schema+json" -jsonpath "$.result.resources[17].size" == 799 +jsonpath "$.result.resources[17].size" == 1422 jsonpath "$.result.resources[17].annotations.priority" == 0 -jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/api/schemas/search/response" -jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema Search API Response" -jsonpath "$.result.resources[18].description" == "The response format for the schema search API endpoint" +jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/response" +jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema RDF API Response" +jsonpath "$.result.resources[18].description" == "The instance promoted to JSON-LD, in expanded, flattened, or compacted form" jsonpath "$.result.resources[18].mimeType" == "application/schema+json" -jsonpath "$.result.resources[18].size" == 1341 +jsonpath "$.result.resources[18].size" == 799 jsonpath "$.result.resources[18].annotations.priority" == 0 -jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/api/schemas/stats/response" -jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema Stats API Response" -jsonpath "$.result.resources[19].description" == "The response format for the schema statistics API endpoint" +jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/api/schemas/search/response" +jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema Search API Response" +jsonpath "$.result.resources[19].description" == "The response format for the schema search API endpoint" jsonpath "$.result.resources[19].mimeType" == "application/schema+json" -jsonpath "$.result.resources[19].size" == 2345 +jsonpath "$.result.resources[19].size" == 1341 jsonpath "$.result.resources[19].annotations.priority" == 0 -jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/request" -jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Trace API Request" -jsonpath "$.result.resources[20].description" == "The JSON instance to trace evaluation against a schema in the catalog" +jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/api/schemas/stats/response" +jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Stats API Response" +jsonpath "$.result.resources[20].description" == "The response format for the schema statistics API endpoint" jsonpath "$.result.resources[20].mimeType" == "application/schema+json" -jsonpath "$.result.resources[20].size" == 419 +jsonpath "$.result.resources[20].size" == 2345 jsonpath "$.result.resources[20].annotations.priority" == 0 -jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/response" -jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Trace API Response" -jsonpath "$.result.resources[21].description" == "The response format for the schema trace API endpoint" +jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/request" +jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Trace API Request" +jsonpath "$.result.resources[21].description" == "The JSON instance to trace evaluation against a schema in the catalog" jsonpath "$.result.resources[21].mimeType" == "application/schema+json" -jsonpath "$.result.resources[21].size" == 2118 +jsonpath "$.result.resources[21].size" == 419 jsonpath "$.result.resources[21].annotations.priority" == 0 -jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/mcp/error" -jsonpath "$.result.resources[22].name" == "Sourcemeta One MCP Error Response" -jsonpath "$.result.resources[22].description" == "The error response Sourcemeta One returns when an MCP request fails" +jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/response" +jsonpath "$.result.resources[22].name" == "Sourcemeta One Schema Trace API Response" +jsonpath "$.result.resources[22].description" == "The response format for the schema trace API endpoint" jsonpath "$.result.resources[22].mimeType" == "application/schema+json" -jsonpath "$.result.resources[22].size" == 5860 +jsonpath "$.result.resources[22].size" == 2290 jsonpath "$.result.resources[22].annotations.priority" == 0 -jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/mcp/initialize/request" -jsonpath "$.result.resources[23].name" == "Sourcemeta One MCP Initialize Request" -jsonpath "$.result.resources[23].description" == "Connection handshake from a client" +jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/mcp/error" +jsonpath "$.result.resources[23].name" == "Sourcemeta One MCP Error Response" +jsonpath "$.result.resources[23].description" == "The error response Sourcemeta One returns when an MCP request fails" jsonpath "$.result.resources[23].mimeType" == "application/schema+json" -jsonpath "$.result.resources[23].size" == 4617 +jsonpath "$.result.resources[23].size" == 5860 jsonpath "$.result.resources[23].annotations.priority" == 0 -jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/initialize/response" -jsonpath "$.result.resources[24].name" == "Sourcemeta One MCP Initialize Response" -jsonpath "$.result.resources[24].description" == "Sourcemeta One's response to a client's initialization" +jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/initialize/request" +jsonpath "$.result.resources[24].name" == "Sourcemeta One MCP Initialize Request" +jsonpath "$.result.resources[24].description" == "Connection handshake from a client" jsonpath "$.result.resources[24].mimeType" == "application/schema+json" -jsonpath "$.result.resources[24].size" == 2524 +jsonpath "$.result.resources[24].size" == 4617 jsonpath "$.result.resources[24].annotations.priority" == 0 -jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" -jsonpath "$.result.resources[25].name" == "Sourcemeta One MCP Cancelled Notification" -jsonpath "$.result.resources[25].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" +jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/initialize/response" +jsonpath "$.result.resources[25].name" == "Sourcemeta One MCP Initialize Response" +jsonpath "$.result.resources[25].description" == "Sourcemeta One's response to a client's initialization" jsonpath "$.result.resources[25].mimeType" == "application/schema+json" -jsonpath "$.result.resources[25].size" == 1163 +jsonpath "$.result.resources[25].size" == 2524 jsonpath "$.result.resources[25].annotations.priority" == 0 -jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" -jsonpath "$.result.resources[26].name" == "Sourcemeta One MCP Initialized Notification" -jsonpath "$.result.resources[26].description" == "Client signal that the handshake is complete and normal operation may begin" +jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" +jsonpath "$.result.resources[26].name" == "Sourcemeta One MCP Cancelled Notification" +jsonpath "$.result.resources[26].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" jsonpath "$.result.resources[26].mimeType" == "application/schema+json" -jsonpath "$.result.resources[26].size" == 740 +jsonpath "$.result.resources[26].size" == 1163 jsonpath "$.result.resources[26].annotations.priority" == 0 -jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" -jsonpath "$.result.resources[27].name" == "Sourcemeta One MCP Ping Request" -jsonpath "$.result.resources[27].description" == "Liveness check from a client" +jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" +jsonpath "$.result.resources[27].name" == "Sourcemeta One MCP Initialized Notification" +jsonpath "$.result.resources[27].description" == "Client signal that the handshake is complete and normal operation may begin" jsonpath "$.result.resources[27].mimeType" == "application/schema+json" -jsonpath "$.result.resources[27].size" == 695 +jsonpath "$.result.resources[27].size" == 740 jsonpath "$.result.resources[27].annotations.priority" == 0 -jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" -jsonpath "$.result.resources[28].name" == "Sourcemeta One MCP Ping Response" -jsonpath "$.result.resources[28].description" == "Sourcemeta One's response to a liveness check" +jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" +jsonpath "$.result.resources[28].name" == "Sourcemeta One MCP Ping Request" +jsonpath "$.result.resources[28].description" == "Liveness check from a client" jsonpath "$.result.resources[28].mimeType" == "application/schema+json" -jsonpath "$.result.resources[28].size" == 598 +jsonpath "$.result.resources[28].size" == 695 jsonpath "$.result.resources[28].annotations.priority" == 0 -jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" -jsonpath "$.result.resources[29].name" == "Sourcemeta One MCP Protected Resource Metadata Response" -jsonpath "$.result.resources[29].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" +jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" +jsonpath "$.result.resources[29].name" == "Sourcemeta One MCP Ping Response" +jsonpath "$.result.resources[29].description" == "Sourcemeta One's response to a liveness check" jsonpath "$.result.resources[29].mimeType" == "application/schema+json" -jsonpath "$.result.resources[29].size" == 2176 +jsonpath "$.result.resources[29].size" == 598 jsonpath "$.result.resources[29].annotations.priority" == 0 -jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/request" -jsonpath "$.result.resources[30].name" == "Sourcemeta One MCP Request" -jsonpath "$.result.resources[30].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" +jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" +jsonpath "$.result.resources[30].name" == "Sourcemeta One MCP Protected Resource Metadata Response" +jsonpath "$.result.resources[30].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" jsonpath "$.result.resources[30].mimeType" == "application/schema+json" -jsonpath "$.result.resources[30].size" == 2520 +jsonpath "$.result.resources[30].size" == 2176 jsonpath "$.result.resources[30].annotations.priority" == 0 -jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" -jsonpath "$.result.resources[31].name" == "Sourcemeta One MCP Resources List Request" -jsonpath "$.result.resources[31].description" == "Request from a client to list MCP resources" +jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/request" +jsonpath "$.result.resources[31].name" == "Sourcemeta One MCP Request" +jsonpath "$.result.resources[31].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" jsonpath "$.result.resources[31].mimeType" == "application/schema+json" -jsonpath "$.result.resources[31].size" == 1071 +jsonpath "$.result.resources[31].size" == 2520 jsonpath "$.result.resources[31].annotations.priority" == 0 -jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" -jsonpath "$.result.resources[32].name" == "Sourcemeta One MCP Resources List Response" -jsonpath "$.result.resources[32].description" == "Sourcemeta One's list of MCP resources" +jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" +jsonpath "$.result.resources[32].name" == "Sourcemeta One MCP Resources List Request" +jsonpath "$.result.resources[32].description" == "Request from a client to list MCP resources" jsonpath "$.result.resources[32].mimeType" == "application/schema+json" -jsonpath "$.result.resources[32].size" == 3062 +jsonpath "$.result.resources[32].size" == 1071 jsonpath "$.result.resources[32].annotations.priority" == 0 -jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" -jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Resources Read Request" -jsonpath "$.result.resources[33].description" == "Request from a client to read an MCP resource" +jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" +jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Resources List Response" +jsonpath "$.result.resources[33].description" == "Sourcemeta One's list of MCP resources" jsonpath "$.result.resources[33].mimeType" == "application/schema+json" -jsonpath "$.result.resources[33].size" == 1293 +jsonpath "$.result.resources[33].size" == 3062 jsonpath "$.result.resources[33].annotations.priority" == 0 -jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" -jsonpath "$.result.resources[34].name" == "Sourcemeta One MCP Resources Read Response" -jsonpath "$.result.resources[34].description" == "Sourcemeta One's response containing an MCP resource" +jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" +jsonpath "$.result.resources[34].name" == "Sourcemeta One MCP Resources Read Request" +jsonpath "$.result.resources[34].description" == "Request from a client to read an MCP resource" jsonpath "$.result.resources[34].mimeType" == "application/schema+json" -jsonpath "$.result.resources[34].size" == 1754 +jsonpath "$.result.resources[34].size" == 1293 jsonpath "$.result.resources[34].annotations.priority" == 0 -jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" -jsonpath "$.result.resources[35].name" == "Sourcemeta One MCP Resources Templates List Request" -jsonpath "$.result.resources[35].description" == "Request from a client to list MCP resource templates" +jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" +jsonpath "$.result.resources[35].name" == "Sourcemeta One MCP Resources Read Response" +jsonpath "$.result.resources[35].description" == "Sourcemeta One's response containing an MCP resource" jsonpath "$.result.resources[35].mimeType" == "application/schema+json" -jsonpath "$.result.resources[35].size" == 922 +jsonpath "$.result.resources[35].size" == 1754 jsonpath "$.result.resources[35].annotations.priority" == 0 -jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" -jsonpath "$.result.resources[36].name" == "Sourcemeta One MCP Resources Templates List Response" -jsonpath "$.result.resources[36].description" == "Sourcemeta One's list of MCP resource templates" +jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" +jsonpath "$.result.resources[36].name" == "Sourcemeta One MCP Resources Templates List Request" +jsonpath "$.result.resources[36].description" == "Request from a client to list MCP resource templates" jsonpath "$.result.resources[36].mimeType" == "application/schema+json" -jsonpath "$.result.resources[36].size" == 2927 +jsonpath "$.result.resources[36].size" == 922 jsonpath "$.result.resources[36].annotations.priority" == 0 -jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/response" -jsonpath "$.result.resources[37].name" == "Sourcemeta One MCP Response" -jsonpath "$.result.resources[37].description" == "Any outgoing MCP response the server returns" +jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" +jsonpath "$.result.resources[37].name" == "Sourcemeta One MCP Resources Templates List Response" +jsonpath "$.result.resources[37].description" == "Sourcemeta One's list of MCP resource templates" jsonpath "$.result.resources[37].mimeType" == "application/schema+json" -jsonpath "$.result.resources[37].size" == 4799 +jsonpath "$.result.resources[37].size" == 2927 jsonpath "$.result.resources[37].annotations.priority" == 0 -jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" -jsonpath "$.result.resources[38].name" == "Sourcemeta One Schema Evaluate RPC Input" -jsonpath "$.result.resources[38].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" +jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/response" +jsonpath "$.result.resources[38].name" == "Sourcemeta One MCP Response" +jsonpath "$.result.resources[38].description" == "Any outgoing MCP response the server returns" jsonpath "$.result.resources[38].mimeType" == "application/schema+json" -jsonpath "$.result.resources[38].size" == 1566 +jsonpath "$.result.resources[38].size" == 4799 jsonpath "$.result.resources[38].annotations.priority" == 0 -jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" -jsonpath "$.result.resources[39].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" +jsonpath "$.result.resources[39].name" == "Sourcemeta One Schema Evaluate RPC Input" jsonpath "$.result.resources[39].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[39].mimeType" == "application/schema+json" -jsonpath "$.result.resources[39].size" == 441 +jsonpath "$.result.resources[39].size" == 1566 jsonpath "$.result.resources[39].annotations.priority" == 0 -jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" -jsonpath "$.result.resources[40].name" == "Sourcemeta One Schema Dependencies RPC Input" -jsonpath "$.result.resources[40].description" == "Get all direct and indirect dependencies of a schema in the catalog" +jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" +jsonpath "$.result.resources[40].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[40].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[40].mimeType" == "application/schema+json" -jsonpath "$.result.resources[40].size" == 687 +jsonpath "$.result.resources[40].size" == 441 jsonpath "$.result.resources[40].annotations.priority" == 0 -jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" -jsonpath "$.result.resources[41].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" +jsonpath "$.result.resources[41].name" == "Sourcemeta One Schema Dependencies RPC Input" jsonpath "$.result.resources[41].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[41].mimeType" == "application/schema+json" -jsonpath "$.result.resources[41].size" == 741 +jsonpath "$.result.resources[41].size" == 687 jsonpath "$.result.resources[41].annotations.priority" == 0 -jsonpath "$.result.resources[42].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" -jsonpath "$.result.resources[42].name" == "Sourcemeta One Schema Dependents RPC Input" -jsonpath "$.result.resources[42].description" == "Get all direct and transitive dependents of a schema in the catalog" +jsonpath "$.result.resources[42].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" +jsonpath "$.result.resources[42].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[42].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[42].mimeType" == "application/schema+json" -jsonpath "$.result.resources[42].size" == 683 +jsonpath "$.result.resources[42].size" == 741 jsonpath "$.result.resources[42].annotations.priority" == 0 -jsonpath "$.result.resources[43].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" -jsonpath "$.result.resources[43].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[43].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" +jsonpath "$.result.resources[43].name" == "Sourcemeta One Schema Dependents RPC Input" jsonpath "$.result.resources[43].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[43].mimeType" == "application/schema+json" -jsonpath "$.result.resources[43].size" == 735 +jsonpath "$.result.resources[43].size" == 683 jsonpath "$.result.resources[43].annotations.priority" == 0 -jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" -jsonpath "$.result.resources[44].name" == "Sourcemeta One Schema Health RPC Input" -jsonpath "$.result.resources[44].description" == "Get the health analysis and score of a schema in the catalog" +jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" +jsonpath "$.result.resources[44].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[44].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[44].mimeType" == "application/schema+json" -jsonpath "$.result.resources[44].size" == 668 +jsonpath "$.result.resources[44].size" == 735 jsonpath "$.result.resources[44].annotations.priority" == 0 -jsonpath "$.result.resources[45].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" -jsonpath "$.result.resources[45].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[45].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" +jsonpath "$.result.resources[45].name" == "Sourcemeta One Schema Health RPC Input" jsonpath "$.result.resources[45].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[45].mimeType" == "application/schema+json" -jsonpath "$.result.resources[45].size" == 415 +jsonpath "$.result.resources[45].size" == 668 jsonpath "$.result.resources[45].annotations.priority" == 0 -jsonpath "$.result.resources[46].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" -jsonpath "$.result.resources[46].name" == "Sourcemeta One Schema Locations RPC Input" -jsonpath "$.result.resources[46].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" +jsonpath "$.result.resources[46].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" +jsonpath "$.result.resources[46].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[46].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[46].mimeType" == "application/schema+json" -jsonpath "$.result.resources[46].size" == 720 +jsonpath "$.result.resources[46].size" == 415 jsonpath "$.result.resources[46].annotations.priority" == 0 -jsonpath "$.result.resources[47].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" -jsonpath "$.result.resources[47].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[47].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" +jsonpath "$.result.resources[47].name" == "Sourcemeta One Schema Locations RPC Input" jsonpath "$.result.resources[47].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[47].mimeType" == "application/schema+json" -jsonpath "$.result.resources[47].size" == 471 +jsonpath "$.result.resources[47].size" == 720 jsonpath "$.result.resources[47].annotations.priority" == 0 -jsonpath "$.result.resources[48].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" -jsonpath "$.result.resources[48].name" == "Sourcemeta One Schema Metadata RPC Input" -jsonpath "$.result.resources[48].description" == "Get metadata information about a schema in the catalog" +jsonpath "$.result.resources[48].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" +jsonpath "$.result.resources[48].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[48].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[48].mimeType" == "application/schema+json" -jsonpath "$.result.resources[48].size" == 666 +jsonpath "$.result.resources[48].size" == 471 jsonpath "$.result.resources[48].annotations.priority" == 0 -jsonpath "$.result.resources[49].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" -jsonpath "$.result.resources[49].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[49].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" +jsonpath "$.result.resources[49].name" == "Sourcemeta One Schema Metadata RPC Input" jsonpath "$.result.resources[49].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[49].mimeType" == "application/schema+json" -jsonpath "$.result.resources[49].size" == 843 +jsonpath "$.result.resources[49].size" == 666 jsonpath "$.result.resources[49].annotations.priority" == 0 # The internal key's second page. @@ -1221,98 +1257,116 @@ Content-Type: application/json [Asserts] jsonpath "$.jsonrpc" == "2.0" jsonpath "$.id" == 6 -jsonpath "$.result.resources" count == 16 +jsonpath "$.result.resources" count == 18 jsonpath "$.result.nextCursor" not exists -jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" -jsonpath "$.result.resources[0].name" == "Sourcemeta One Schema Positions RPC Input" -jsonpath "$.result.resources[0].description" == "Get line and column position information for every token in a schema" +jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" +jsonpath "$.result.resources[0].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[0].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[0].mimeType" == "application/schema+json" -jsonpath "$.result.resources[0].size" == 682 +jsonpath "$.result.resources[0].size" == 843 jsonpath "$.result.resources[0].annotations.priority" == 0 -jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" -jsonpath "$.result.resources[1].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" +jsonpath "$.result.resources[1].name" == "Sourcemeta One Schema Positions RPC Input" jsonpath "$.result.resources[1].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[1].mimeType" == "application/schema+json" -jsonpath "$.result.resources[1].size" == 435 +jsonpath "$.result.resources[1].size" == 682 jsonpath "$.result.resources[1].annotations.priority" == 0 -jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" -jsonpath "$.result.resources[2].name" == "Sourcemeta One Schema Statistics RPC Input" -jsonpath "$.result.resources[2].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" +jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" +jsonpath "$.result.resources[2].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[2].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[2].mimeType" == "application/schema+json" -jsonpath "$.result.resources[2].size" == 703 +jsonpath "$.result.resources[2].size" == 435 jsonpath "$.result.resources[2].annotations.priority" == 0 -jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" -jsonpath "$.result.resources[3].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" +jsonpath "$.result.resources[3].name" == "Sourcemeta One Schema Statistics RPC Input" jsonpath "$.result.resources[3].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[3].mimeType" == "application/schema+json" -jsonpath "$.result.resources[3].size" == 709 +jsonpath "$.result.resources[3].size" == 703 jsonpath "$.result.resources[3].annotations.priority" == 0 -jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" -jsonpath "$.result.resources[4].name" == "Sourcemeta One Schema RDF RPC Input" -jsonpath "$.result.resources[4].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" +jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" +jsonpath "$.result.resources[4].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[4].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[4].mimeType" == "application/schema+json" -jsonpath "$.result.resources[4].size" == 2558 +jsonpath "$.result.resources[4].size" == 709 jsonpath "$.result.resources[4].annotations.priority" == 0 -jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" -jsonpath "$.result.resources[5].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" +jsonpath "$.result.resources[5].name" == "Sourcemeta One Schema RDF RPC Input" jsonpath "$.result.resources[5].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[5].mimeType" == "application/schema+json" -jsonpath "$.result.resources[5].size" == 1589 +jsonpath "$.result.resources[5].size" == 2558 jsonpath "$.result.resources[5].annotations.priority" == 0 -jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" -jsonpath "$.result.resources[6].name" == "Sourcemeta One Directory Listing RPC Input" -jsonpath "$.result.resources[6].description" == "List the contents of a directory in the catalog" +jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" +jsonpath "$.result.resources[6].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[6].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[6].mimeType" == "application/schema+json" -jsonpath "$.result.resources[6].size" == 549 +jsonpath "$.result.resources[6].size" == 1589 jsonpath "$.result.resources[6].annotations.priority" == 0 -jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" -jsonpath "$.result.resources[7].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" +jsonpath "$.result.resources[7].name" == "Sourcemeta One Directory Listing RPC Input" jsonpath "$.result.resources[7].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[7].mimeType" == "application/schema+json" -jsonpath "$.result.resources[7].size" == 609 +jsonpath "$.result.resources[7].size" == 549 jsonpath "$.result.resources[7].annotations.priority" == 0 -jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" -jsonpath "$.result.resources[8].name" == "Sourcemeta One MCP Tools Call Request" -jsonpath "$.result.resources[8].description" == "Request from a client to invoke an MCP tool by name" +jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" +jsonpath "$.result.resources[8].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[8].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[8].mimeType" == "application/schema+json" -jsonpath "$.result.resources[8].size" == 1161 +jsonpath "$.result.resources[8].size" == 609 jsonpath "$.result.resources[8].annotations.priority" == 0 -jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" -jsonpath "$.result.resources[9].name" == "Sourcemeta One MCP Tools Call Response" -jsonpath "$.result.resources[9].description" == "Sourcemeta One's response to a tool invocation" +jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" +jsonpath "$.result.resources[9].name" == "Sourcemeta One MCP Tools Call Request" +jsonpath "$.result.resources[9].description" == "Request from a client to invoke an MCP tool by name" jsonpath "$.result.resources[9].mimeType" == "application/schema+json" -jsonpath "$.result.resources[9].size" == 4668 +jsonpath "$.result.resources[9].size" == 1161 jsonpath "$.result.resources[9].annotations.priority" == 0 -jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" -jsonpath "$.result.resources[10].name" == "Sourcemeta One Schema Search RPC Input" -jsonpath "$.result.resources[10].description" == "Search for schemas in the catalog by query term" +jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" +jsonpath "$.result.resources[10].name" == "Sourcemeta One MCP Tools Call Response" +jsonpath "$.result.resources[10].description" == "Sourcemeta One's response to a tool invocation" jsonpath "$.result.resources[10].mimeType" == "application/schema+json" -jsonpath "$.result.resources[10].size" == 2155 +jsonpath "$.result.resources[10].size" == 4668 jsonpath "$.result.resources[10].annotations.priority" == 0 -jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" -jsonpath "$.result.resources[11].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" +jsonpath "$.result.resources[11].name" == "Sourcemeta One Schema Search RPC Input" jsonpath "$.result.resources[11].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[11].mimeType" == "application/schema+json" -jsonpath "$.result.resources[11].size" == 777 +jsonpath "$.result.resources[11].size" == 2155 jsonpath "$.result.resources[11].annotations.priority" == 0 -jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" -jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Trace RPC Input" -jsonpath "$.result.resources[12].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" +jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" +jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[12].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[12].mimeType" == "application/schema+json" -jsonpath "$.result.resources[12].size" == 1735 +jsonpath "$.result.resources[12].size" == 777 jsonpath "$.result.resources[12].annotations.priority" == 0 -jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" -jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" +jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Trace RPC Input" jsonpath "$.result.resources[13].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[13].mimeType" == "application/schema+json" -jsonpath "$.result.resources[13].size" == 497 +jsonpath "$.result.resources[13].size" == 1735 jsonpath "$.result.resources[13].annotations.priority" == 0 -jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" -jsonpath "$.result.resources[14].name" == "Sourcemeta One MCP Tools List Request" -jsonpath "$.result.resources[14].description" == "Request from a client to list MCP tools" +jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" +jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[14].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[14].mimeType" == "application/schema+json" -jsonpath "$.result.resources[14].size" == 853 +jsonpath "$.result.resources[14].size" == 497 jsonpath "$.result.resources[14].annotations.priority" == 0 +jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" +jsonpath "$.result.resources[15].name" == "Sourcemeta One MCP Tools List Request" +jsonpath "$.result.resources[15].description" == "Request from a client to list MCP tools" +jsonpath "$.result.resources[15].mimeType" == "application/schema+json" +jsonpath "$.result.resources[15].size" == 853 +jsonpath "$.result.resources[15].annotations.priority" == 0 +jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/response" +jsonpath "$.result.resources[16].name" == "Sourcemeta One MCP Tools List Response" +jsonpath "$.result.resources[16].description" == "Sourcemeta One's list of MCP tools" +jsonpath "$.result.resources[16].mimeType" == "application/schema+json" +jsonpath "$.result.resources[16].size" == 4495 +jsonpath "$.result.resources[16].annotations.priority" == 0 +jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/request" +jsonpath "$.result.resources[17].name" == "Sourcemeta One Playground Schema Trace API Request" +jsonpath "$.result.resources[17].description" == "A JSON instance and the schema to trace its evaluation against" +jsonpath "$.result.resources[17].mimeType" == "application/schema+json" +jsonpath "$.result.resources[17].size" == 1124 +jsonpath "$.result.resources[17].annotations.priority" == 0 # A cursor that is not aligned to a page boundary is rejected before the catalog # is scanned, so a malformed cursor cannot force a full scan. diff --git a/enterprise/e2e/auth/hurl/playground-trace-references.all.hurl b/enterprise/e2e/auth/hurl/playground-trace-references.all.hurl new file mode 100644 index 000000000..c65f880c7 --- /dev/null +++ b/enterprise/e2e/auth/hurl/playground-trace-references.all.hurl @@ -0,0 +1,821 @@ +# Here the playground namespace itself is ungated, so anybody reaches the +# compiler. That makes this the sharper test of the two: what a supplied schema +# may reference is decided per reference, against whoever is asking, rather than +# by whether they got through the door. +# +# It matters most for trace specifically. A trace step carries the values the +# schema was written with, so a reference that resolves when it should not does +# not leak one bit, it prints the schema back to whoever asked. + +# An anonymous caller reaches the route and compiles a schema of their own +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "hello", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "string" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 2 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "AssertionTypeStrict" +jsonpath "$.steps[0].evaluatePath" == "/type" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 21 +jsonpath "$.steps[0].keywordLocation" == "#/type" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[1].type" == "pass" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 21 +jsonpath "$.steps[1].keywordLocation" == "#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == "The value was expected to be of type string" +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# And may reference what is public +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "hello", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/public/string" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 4 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 21 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/$ref/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 21 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/public/string#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[2].type" == "pass" +jsonpath "$.steps[2].name" == "AssertionTypeStrict" +jsonpath "$.steps[2].evaluatePath" == "/$ref/type" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 2 +jsonpath "$.steps[2].instancePositions[3]" == 21 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/public/string#/type" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == "The value was expected to be of type string" +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[3].type" == "pass" +jsonpath "$.steps[3].name" == "ControlJump" +jsonpath "$.steps[3].evaluatePath" == "/$ref" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 2 +jsonpath "$.steps[3].instancePositions[3]" == 21 +jsonpath "$.steps[3].keywordLocation" == "#/$ref" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == "The string value was expected to validate against the referenced schema" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# THE ONE THAT MATTERS. The same anonymous caller, admitted to this route, +# names a schema they may not read. It must not resolve, and none of what it +# says may come back +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": { + "token": "abc" + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/private/secret" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "{{base}}/private/secret" +jsonpath "$.schemaLocation" == "/$ref" +body not contains "token" +body not contains "additionalProperties" +body not contains "steps" +body not contains "valid" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# Present the credential that governs it and the very same request +# resolves, which is what proves the refusal above was authorization rather +# than an accident +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer primary-secret-key +``` +{ + "instance": { + "token": "abc" + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/private/secret" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 13 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 4 +jsonpath "$.steps[0].instancePositions[3]" == 3 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "AssertionDefinesStrict" +jsonpath "$.steps[1].evaluatePath" == "/$ref/required" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 4 +jsonpath "$.steps[1].instancePositions[3]" == 3 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/private/secret#/required" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[2].type" == "pass" +jsonpath "$.steps[2].name" == "AssertionDefinesStrict" +jsonpath "$.steps[2].evaluatePath" == "/$ref/required" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 4 +jsonpath "$.steps[2].instancePositions[3]" == 3 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/private/secret#/required" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == "The value was expected to be an object that defines the property \"token\"" +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[3].type" == "push" +jsonpath "$.steps[3].name" == "LogicalWhenType" +jsonpath "$.steps[3].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 4 +jsonpath "$.steps[3].instancePositions[3]" == 3 +jsonpath "$.steps[3].keywordLocation" == "{{base}}/private/secret#/properties" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == null +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[4].type" == "push" +jsonpath "$.steps[4].name" == "AssertionTypeStrict" +jsonpath "$.steps[4].evaluatePath" == "/$ref/properties/token/type" +jsonpath "$.steps[4].instanceLocation" == "/token" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 3 +jsonpath "$.steps[4].instancePositions[1]" == 5 +jsonpath "$.steps[4].instancePositions[2]" == 3 +jsonpath "$.steps[4].instancePositions[3]" == 18 +jsonpath "$.steps[4].keywordLocation" == "{{base}}/private/secret#/properties/token/type" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == null +jsonpath "$.steps[4].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[5].type" == "pass" +jsonpath "$.steps[5].name" == "AssertionTypeStrict" +jsonpath "$.steps[5].evaluatePath" == "/$ref/properties/token/type" +jsonpath "$.steps[5].instanceLocation" == "/token" +jsonpath "$.steps[5].instancePositions" count == 4 +jsonpath "$.steps[5].instancePositions[0]" == 3 +jsonpath "$.steps[5].instancePositions[1]" == 5 +jsonpath "$.steps[5].instancePositions[2]" == 3 +jsonpath "$.steps[5].instancePositions[3]" == 18 +jsonpath "$.steps[5].keywordLocation" == "{{base}}/private/secret#/properties/token/type" +jsonpath "$.steps[5].annotation" == null +jsonpath "$.steps[5].message" == "The value was expected to be of type string" +jsonpath "$.steps[5].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[6].type" == "pass" +jsonpath "$.steps[6].name" == "AnnotationEmitWrapped" +jsonpath "$.steps[6].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[6].instanceLocation" == "" +jsonpath "$.steps[6].instancePositions" count == 4 +jsonpath "$.steps[6].instancePositions[0]" == 2 +jsonpath "$.steps[6].instancePositions[1]" == 3 +jsonpath "$.steps[6].instancePositions[2]" == 4 +jsonpath "$.steps[6].instancePositions[3]" == 3 +jsonpath "$.steps[6].keywordLocation" == "{{base}}/private/secret#/properties" +jsonpath "$.steps[6].annotation" == "token" +jsonpath "$.steps[6].message" == "The object property \"token\" successfully validated against its property subschema" +jsonpath "$.steps[6].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[7].type" == "pass" +jsonpath "$.steps[7].name" == "LogicalWhenType" +jsonpath "$.steps[7].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[7].instanceLocation" == "" +jsonpath "$.steps[7].instancePositions" count == 4 +jsonpath "$.steps[7].instancePositions[0]" == 2 +jsonpath "$.steps[7].instancePositions[1]" == 3 +jsonpath "$.steps[7].instancePositions[2]" == 4 +jsonpath "$.steps[7].instancePositions[3]" == 3 +jsonpath "$.steps[7].keywordLocation" == "{{base}}/private/secret#/properties" +jsonpath "$.steps[7].annotation" == null +jsonpath "$.steps[7].message" == "The object value was expected to validate against the defined properties subschemas" +jsonpath "$.steps[7].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[8].type" == "push" +jsonpath "$.steps[8].name" == "LoopPropertiesExcept" +jsonpath "$.steps[8].evaluatePath" == "/$ref/additionalProperties" +jsonpath "$.steps[8].instanceLocation" == "" +jsonpath "$.steps[8].instancePositions" count == 4 +jsonpath "$.steps[8].instancePositions[0]" == 2 +jsonpath "$.steps[8].instancePositions[1]" == 3 +jsonpath "$.steps[8].instancePositions[2]" == 4 +jsonpath "$.steps[8].instancePositions[3]" == 3 +jsonpath "$.steps[8].keywordLocation" == "{{base}}/private/secret#/additionalProperties" +jsonpath "$.steps[8].annotation" == null +jsonpath "$.steps[8].message" == null +jsonpath "$.steps[8].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[9].type" == "pass" +jsonpath "$.steps[9].name" == "LoopPropertiesExcept" +jsonpath "$.steps[9].evaluatePath" == "/$ref/additionalProperties" +jsonpath "$.steps[9].instanceLocation" == "" +jsonpath "$.steps[9].instancePositions" count == 4 +jsonpath "$.steps[9].instancePositions[0]" == 2 +jsonpath "$.steps[9].instancePositions[1]" == 3 +jsonpath "$.steps[9].instancePositions[2]" == 4 +jsonpath "$.steps[9].instancePositions[3]" == 3 +jsonpath "$.steps[9].keywordLocation" == "{{base}}/private/secret#/additionalProperties" +jsonpath "$.steps[9].annotation" == null +jsonpath "$.steps[9].message" == "The object value was not expected to define additional properties" +jsonpath "$.steps[9].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[10].type" == "push" +jsonpath "$.steps[10].name" == "AssertionTypeStrict" +jsonpath "$.steps[10].evaluatePath" == "/$ref/type" +jsonpath "$.steps[10].instanceLocation" == "" +jsonpath "$.steps[10].instancePositions" count == 4 +jsonpath "$.steps[10].instancePositions[0]" == 2 +jsonpath "$.steps[10].instancePositions[1]" == 3 +jsonpath "$.steps[10].instancePositions[2]" == 4 +jsonpath "$.steps[10].instancePositions[3]" == 3 +jsonpath "$.steps[10].keywordLocation" == "{{base}}/private/secret#/type" +jsonpath "$.steps[10].annotation" == null +jsonpath "$.steps[10].message" == null +jsonpath "$.steps[10].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[11].type" == "pass" +jsonpath "$.steps[11].name" == "AssertionTypeStrict" +jsonpath "$.steps[11].evaluatePath" == "/$ref/type" +jsonpath "$.steps[11].instanceLocation" == "" +jsonpath "$.steps[11].instancePositions" count == 4 +jsonpath "$.steps[11].instancePositions[0]" == 2 +jsonpath "$.steps[11].instancePositions[1]" == 3 +jsonpath "$.steps[11].instancePositions[2]" == 4 +jsonpath "$.steps[11].instancePositions[3]" == 3 +jsonpath "$.steps[11].keywordLocation" == "{{base}}/private/secret#/type" +jsonpath "$.steps[11].annotation" == null +jsonpath "$.steps[11].message" == "The value was expected to be of type object" +jsonpath "$.steps[11].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[12].type" == "pass" +jsonpath "$.steps[12].name" == "ControlJump" +jsonpath "$.steps[12].evaluatePath" == "/$ref" +jsonpath "$.steps[12].instanceLocation" == "" +jsonpath "$.steps[12].instancePositions" count == 4 +jsonpath "$.steps[12].instancePositions[0]" == 2 +jsonpath "$.steps[12].instancePositions[1]" == 3 +jsonpath "$.steps[12].instancePositions[2]" == 4 +jsonpath "$.steps[12].instancePositions[3]" == 3 +jsonpath "$.steps[12].keywordLocation" == "#/$ref" +jsonpath "$.steps[12].annotation" == null +jsonpath "$.steps[12].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[12].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# With an instance that schema refuses, so the reference is demonstrably +# being evaluated rather than skipped +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer primary-secret-key +``` +{ + "instance": { + "token": 42 + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/private/secret" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == false +jsonpath "$.steps" count == 8 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 4 +jsonpath "$.steps[0].instancePositions[3]" == 3 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "AssertionDefinesStrict" +jsonpath "$.steps[1].evaluatePath" == "/$ref/required" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 4 +jsonpath "$.steps[1].instancePositions[3]" == 3 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/private/secret#/required" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[2].type" == "pass" +jsonpath "$.steps[2].name" == "AssertionDefinesStrict" +jsonpath "$.steps[2].evaluatePath" == "/$ref/required" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 4 +jsonpath "$.steps[2].instancePositions[3]" == 3 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/private/secret#/required" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == "The value was expected to be an object that defines the property \"token\"" +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[3].type" == "push" +jsonpath "$.steps[3].name" == "LogicalWhenType" +jsonpath "$.steps[3].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 4 +jsonpath "$.steps[3].instancePositions[3]" == 3 +jsonpath "$.steps[3].keywordLocation" == "{{base}}/private/secret#/properties" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == null +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[4].type" == "push" +jsonpath "$.steps[4].name" == "AssertionTypeStrict" +jsonpath "$.steps[4].evaluatePath" == "/$ref/properties/token/type" +jsonpath "$.steps[4].instanceLocation" == "/token" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 3 +jsonpath "$.steps[4].instancePositions[1]" == 5 +jsonpath "$.steps[4].instancePositions[2]" == 3 +jsonpath "$.steps[4].instancePositions[3]" == 15 +jsonpath "$.steps[4].keywordLocation" == "{{base}}/private/secret#/properties/token/type" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == null +jsonpath "$.steps[4].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[5].type" == "fail" +jsonpath "$.steps[5].name" == "AssertionTypeStrict" +jsonpath "$.steps[5].evaluatePath" == "/$ref/properties/token/type" +jsonpath "$.steps[5].instanceLocation" == "/token" +jsonpath "$.steps[5].instancePositions" count == 4 +jsonpath "$.steps[5].instancePositions[0]" == 3 +jsonpath "$.steps[5].instancePositions[1]" == 5 +jsonpath "$.steps[5].instancePositions[2]" == 3 +jsonpath "$.steps[5].instancePositions[3]" == 15 +jsonpath "$.steps[5].keywordLocation" == "{{base}}/private/secret#/properties/token/type" +jsonpath "$.steps[5].annotation" == null +jsonpath "$.steps[5].message" == "The value was expected to be of type string but it was of type integer" +jsonpath "$.steps[5].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[6].type" == "fail" +jsonpath "$.steps[6].name" == "LogicalWhenType" +jsonpath "$.steps[6].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[6].instanceLocation" == "" +jsonpath "$.steps[6].instancePositions" count == 4 +jsonpath "$.steps[6].instancePositions[0]" == 2 +jsonpath "$.steps[6].instancePositions[1]" == 3 +jsonpath "$.steps[6].instancePositions[2]" == 4 +jsonpath "$.steps[6].instancePositions[3]" == 3 +jsonpath "$.steps[6].keywordLocation" == "{{base}}/private/secret#/properties" +jsonpath "$.steps[6].annotation" == null +jsonpath "$.steps[6].message" == "The object value was expected to validate against the defined properties subschemas" +jsonpath "$.steps[6].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[7].type" == "fail" +jsonpath "$.steps[7].name" == "ControlJump" +jsonpath "$.steps[7].evaluatePath" == "/$ref" +jsonpath "$.steps[7].instanceLocation" == "" +jsonpath "$.steps[7].instancePositions" count == 4 +jsonpath "$.steps[7].instancePositions[0]" == 2 +jsonpath "$.steps[7].instancePositions[1]" == 3 +jsonpath "$.steps[7].instancePositions[2]" == 4 +jsonpath "$.steps[7].instancePositions[3]" == 3 +jsonpath "$.steps[7].keywordLocation" == "#/$ref" +jsonpath "$.steps[7].annotation" == null +jsonpath "$.steps[7].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[7].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A credential for a different collection does not open this one +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer internal-secret-key +``` +{ + "instance": { + "token": "abc" + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/private/secret" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "{{base}}/private/secret" +jsonpath "$.schemaLocation" == "/$ref" +body not contains "token" +body not contains "additionalProperties" +body not contains "steps" +body not contains "valid" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# And the reverse, so neither key stands in for the other +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer primary-secret-key +``` +{ + "instance": {}, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/internal/config" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "{{base}}/internal/config" +jsonpath "$.schemaLocation" == "/$ref" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A credential this instance does not know leaves the caller anonymous for +# the purposes of what a reference may reach, rather than refusing the request +# outright +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Authorization: Bearer not-a-real-key +``` +{ + "instance": { + "token": "abc" + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/private/secret" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "{{base}}/private/secret" +jsonpath "$.schemaLocation" == "/$ref" +body not contains "token" +body not contains "additionalProperties" +body not contains "steps" +body not contains "valid" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A gated schema reached through a chain rather than named directly is +# refused at the hop that needs the credential +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": { + "token": "abc" + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "hop": { + "$ref": "{{base}}/private/secret" + } + }, + "$ref": "#/$defs/hop" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "{{base}}/private/secret" +jsonpath "$.schemaLocation" == "/$defs/hop/$ref" +body not contains "token" +body not contains "additionalProperties" +body not contains "steps" +body not contains "valid" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true diff --git a/enterprise/e2e/html/hurl/list.all.hurl b/enterprise/e2e/html/hurl/list.all.hurl index 0b7b8d6d4..5893def3f 100644 --- a/enterprise/e2e/html/hurl/list.all.hurl +++ b/enterprise/e2e/html/hurl/list.all.hurl @@ -19,7 +19,7 @@ header "Last-Modified" exists jsonpath "$.path" == "/" jsonpath "$.url" == "{{base}}" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.schemas" == 140 +jsonpath "$.schemas" == 142 jsonpath "$.entries" count == 4 jsonpath "$.private" == false jsonpath "$.entries[0].name" == "no-blaze" @@ -33,8 +33,8 @@ jsonpath "$.entries[1].private" == false jsonpath "$.entries[1].title" == "Self" jsonpath "$.entries[1].description" == "The schemas that define the current version of this instance" jsonpath "$.entries[1].type" == "directory" -jsonpath "$.entries[1].health" == 100 -jsonpath "$.entries[1].schemas" == 63 +jsonpath "$.entries[1].health" == 99 +jsonpath "$.entries[1].schemas" == 65 jsonpath "$.entries[1].path" == "/self/" jsonpath "$.entries[2].name" == "test" jsonpath "$.entries[2].private" == false diff --git a/enterprise/e2e/html/hurl/mcp-2025-03-26.all.hurl b/enterprise/e2e/html/hurl/mcp-2025-03-26.all.hurl index b1a2c662b..1fa9e65d1 100644 --- a/enterprise/e2e/html/hurl/mcp-2025-03-26.all.hurl +++ b/enterprise/e2e/html/hurl/mcp-2025-03-26.all.hurl @@ -754,7 +754,7 @@ jsonpath "$..mimeType" not exists variable "text" jsonpath "$.path" == "/" variable "text" jsonpath "$.url" == "{{base}}" variable "text" jsonpath "$.breadcrumb" count == 0 -variable "text" jsonpath "$.schemas" == 140 +variable "text" jsonpath "$.schemas" == 142 variable "text" jsonpath "$.entries" count == 4 variable "text" jsonpath "$.private" == false variable "text" jsonpath "$.entries[0].name" == "no-blaze" @@ -768,8 +768,8 @@ variable "text" jsonpath "$.entries[1].private" == false variable "text" jsonpath "$.entries[1].title" == "Self" variable "text" jsonpath "$.entries[1].description" == "The schemas that define the current version of this instance" variable "text" jsonpath "$.entries[1].type" == "directory" -variable "text" jsonpath "$.entries[1].health" == 100 -variable "text" jsonpath "$.entries[1].schemas" == 63 +variable "text" jsonpath "$.entries[1].health" == 99 +variable "text" jsonpath "$.entries[1].schemas" == 65 variable "text" jsonpath "$.entries[1].path" == "/self/" variable "text" jsonpath "$.entries[2].name" == "test" variable "text" jsonpath "$.entries[2].private" == false diff --git a/enterprise/e2e/html/hurl/mcp-2025-06-18.all.hurl b/enterprise/e2e/html/hurl/mcp-2025-06-18.all.hurl index 5b717fc5a..edced2527 100644 --- a/enterprise/e2e/html/hurl/mcp-2025-06-18.all.hurl +++ b/enterprise/e2e/html/hurl/mcp-2025-06-18.all.hurl @@ -745,8 +745,8 @@ jsonpath "$.result.structuredContent.url" == "{{base}}" variable "text" jsonpath "$.url" == "{{base}}" jsonpath "$.result.structuredContent.breadcrumb" count == 0 variable "text" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.result.structuredContent.schemas" == 140 -variable "text" jsonpath "$.schemas" == 140 +jsonpath "$.result.structuredContent.schemas" == 142 +variable "text" jsonpath "$.schemas" == 142 jsonpath "$.result.structuredContent.entries" count == 4 jsonpath "$.result.structuredContent.private" == false variable "text" jsonpath "$.entries" count == 4 @@ -773,10 +773,10 @@ jsonpath "$.result.structuredContent.entries[1].description" == "The schemas tha variable "text" jsonpath "$.entries[1].description" == "The schemas that define the current version of this instance" jsonpath "$.result.structuredContent.entries[1].type" == "directory" variable "text" jsonpath "$.entries[1].type" == "directory" -jsonpath "$.result.structuredContent.entries[1].health" == 100 -variable "text" jsonpath "$.entries[1].health" == 100 -jsonpath "$.result.structuredContent.entries[1].schemas" == 63 -variable "text" jsonpath "$.entries[1].schemas" == 63 +jsonpath "$.result.structuredContent.entries[1].health" == 99 +variable "text" jsonpath "$.entries[1].health" == 99 +jsonpath "$.result.structuredContent.entries[1].schemas" == 65 +variable "text" jsonpath "$.entries[1].schemas" == 65 jsonpath "$.result.structuredContent.entries[1].path" == "/self/" variable "text" jsonpath "$.entries[1].path" == "/self/" jsonpath "$.result.structuredContent.entries[2].name" == "test" diff --git a/enterprise/e2e/html/hurl/mcp-2025-11-25-gzip.all.hurl b/enterprise/e2e/html/hurl/mcp-2025-11-25-gzip.all.hurl index 7aa487b08..8ca8efc47 100644 --- a/enterprise/e2e/html/hurl/mcp-2025-11-25-gzip.all.hurl +++ b/enterprise/e2e/html/hurl/mcp-2025-11-25-gzip.all.hurl @@ -699,247 +699,259 @@ header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) header "Content-Encoding" not exists jsonpath "$.jsonrpc" == "2.0" jsonpath "$.id" == "rlist-identity" -jsonpath "$.result.resources" count == 40 -jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" -jsonpath "$.result.resources[0].name" == "Sourcemeta One MCP Initialized Notification" -jsonpath "$.result.resources[0].description" == "Client signal that the handshake is complete and normal operation may begin" +jsonpath "$.result.resources" count == 42 +jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" +jsonpath "$.result.resources[0].name" == "Sourcemeta One MCP Cancelled Notification" +jsonpath "$.result.resources[0].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" jsonpath "$.result.resources[0].mimeType" == "application/schema+json" -jsonpath "$.result.resources[0].size" == 740 +jsonpath "$.result.resources[0].size" == 1163 jsonpath "$.result.resources[0].annotations.priority" == 0 -jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" -jsonpath "$.result.resources[1].name" == "Sourcemeta One MCP Ping Request" -jsonpath "$.result.resources[1].description" == "Liveness check from a client" +jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" +jsonpath "$.result.resources[1].name" == "Sourcemeta One MCP Initialized Notification" +jsonpath "$.result.resources[1].description" == "Client signal that the handshake is complete and normal operation may begin" jsonpath "$.result.resources[1].mimeType" == "application/schema+json" -jsonpath "$.result.resources[1].size" == 695 +jsonpath "$.result.resources[1].size" == 740 jsonpath "$.result.resources[1].annotations.priority" == 0 -jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" -jsonpath "$.result.resources[2].name" == "Sourcemeta One MCP Ping Response" -jsonpath "$.result.resources[2].description" == "Sourcemeta One's response to a liveness check" +jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" +jsonpath "$.result.resources[2].name" == "Sourcemeta One MCP Ping Request" +jsonpath "$.result.resources[2].description" == "Liveness check from a client" jsonpath "$.result.resources[2].mimeType" == "application/schema+json" -jsonpath "$.result.resources[2].size" == 598 +jsonpath "$.result.resources[2].size" == 695 jsonpath "$.result.resources[2].annotations.priority" == 0 -jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" -jsonpath "$.result.resources[3].name" == "Sourcemeta One MCP Protected Resource Metadata Response" -jsonpath "$.result.resources[3].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" +jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" +jsonpath "$.result.resources[3].name" == "Sourcemeta One MCP Ping Response" +jsonpath "$.result.resources[3].description" == "Sourcemeta One's response to a liveness check" jsonpath "$.result.resources[3].mimeType" == "application/schema+json" -jsonpath "$.result.resources[3].size" == 2176 +jsonpath "$.result.resources[3].size" == 598 jsonpath "$.result.resources[3].annotations.priority" == 0 -jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/request" -jsonpath "$.result.resources[4].name" == "Sourcemeta One MCP Request" -jsonpath "$.result.resources[4].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" +jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" +jsonpath "$.result.resources[4].name" == "Sourcemeta One MCP Protected Resource Metadata Response" +jsonpath "$.result.resources[4].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" jsonpath "$.result.resources[4].mimeType" == "application/schema+json" -jsonpath "$.result.resources[4].size" == 2520 +jsonpath "$.result.resources[4].size" == 2176 jsonpath "$.result.resources[4].annotations.priority" == 0 -jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" -jsonpath "$.result.resources[5].name" == "Sourcemeta One MCP Resources List Request" -jsonpath "$.result.resources[5].description" == "Request from a client to list MCP resources" +jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/request" +jsonpath "$.result.resources[5].name" == "Sourcemeta One MCP Request" +jsonpath "$.result.resources[5].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" jsonpath "$.result.resources[5].mimeType" == "application/schema+json" -jsonpath "$.result.resources[5].size" == 1071 +jsonpath "$.result.resources[5].size" == 2520 jsonpath "$.result.resources[5].annotations.priority" == 0 -jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" -jsonpath "$.result.resources[6].name" == "Sourcemeta One MCP Resources List Response" -jsonpath "$.result.resources[6].description" == "Sourcemeta One's list of MCP resources" +jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" +jsonpath "$.result.resources[6].name" == "Sourcemeta One MCP Resources List Request" +jsonpath "$.result.resources[6].description" == "Request from a client to list MCP resources" jsonpath "$.result.resources[6].mimeType" == "application/schema+json" -jsonpath "$.result.resources[6].size" == 3062 +jsonpath "$.result.resources[6].size" == 1071 jsonpath "$.result.resources[6].annotations.priority" == 0 -jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" -jsonpath "$.result.resources[7].name" == "Sourcemeta One MCP Resources Read Request" -jsonpath "$.result.resources[7].description" == "Request from a client to read an MCP resource" +jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" +jsonpath "$.result.resources[7].name" == "Sourcemeta One MCP Resources List Response" +jsonpath "$.result.resources[7].description" == "Sourcemeta One's list of MCP resources" jsonpath "$.result.resources[7].mimeType" == "application/schema+json" -jsonpath "$.result.resources[7].size" == 1293 +jsonpath "$.result.resources[7].size" == 3062 jsonpath "$.result.resources[7].annotations.priority" == 0 -jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" -jsonpath "$.result.resources[8].name" == "Sourcemeta One MCP Resources Read Response" -jsonpath "$.result.resources[8].description" == "Sourcemeta One's response containing an MCP resource" +jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" +jsonpath "$.result.resources[8].name" == "Sourcemeta One MCP Resources Read Request" +jsonpath "$.result.resources[8].description" == "Request from a client to read an MCP resource" jsonpath "$.result.resources[8].mimeType" == "application/schema+json" -jsonpath "$.result.resources[8].size" == 1754 +jsonpath "$.result.resources[8].size" == 1293 jsonpath "$.result.resources[8].annotations.priority" == 0 -jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" -jsonpath "$.result.resources[9].name" == "Sourcemeta One MCP Resources Templates List Request" -jsonpath "$.result.resources[9].description" == "Request from a client to list MCP resource templates" +jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" +jsonpath "$.result.resources[9].name" == "Sourcemeta One MCP Resources Read Response" +jsonpath "$.result.resources[9].description" == "Sourcemeta One's response containing an MCP resource" jsonpath "$.result.resources[9].mimeType" == "application/schema+json" -jsonpath "$.result.resources[9].size" == 922 +jsonpath "$.result.resources[9].size" == 1754 jsonpath "$.result.resources[9].annotations.priority" == 0 -jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" -jsonpath "$.result.resources[10].name" == "Sourcemeta One MCP Resources Templates List Response" -jsonpath "$.result.resources[10].description" == "Sourcemeta One's list of MCP resource templates" +jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" +jsonpath "$.result.resources[10].name" == "Sourcemeta One MCP Resources Templates List Request" +jsonpath "$.result.resources[10].description" == "Request from a client to list MCP resource templates" jsonpath "$.result.resources[10].mimeType" == "application/schema+json" -jsonpath "$.result.resources[10].size" == 2927 +jsonpath "$.result.resources[10].size" == 922 jsonpath "$.result.resources[10].annotations.priority" == 0 -jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/response" -jsonpath "$.result.resources[11].name" == "Sourcemeta One MCP Response" -jsonpath "$.result.resources[11].description" == "Any outgoing MCP response the server returns" +jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" +jsonpath "$.result.resources[11].name" == "Sourcemeta One MCP Resources Templates List Response" +jsonpath "$.result.resources[11].description" == "Sourcemeta One's list of MCP resource templates" jsonpath "$.result.resources[11].mimeType" == "application/schema+json" -jsonpath "$.result.resources[11].size" == 4799 +jsonpath "$.result.resources[11].size" == 2927 jsonpath "$.result.resources[11].annotations.priority" == 0 -jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" -jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Evaluate RPC Input" -jsonpath "$.result.resources[12].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" +jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/response" +jsonpath "$.result.resources[12].name" == "Sourcemeta One MCP Response" +jsonpath "$.result.resources[12].description" == "Any outgoing MCP response the server returns" jsonpath "$.result.resources[12].mimeType" == "application/schema+json" -jsonpath "$.result.resources[12].size" == 1566 +jsonpath "$.result.resources[12].size" == 4799 jsonpath "$.result.resources[12].annotations.priority" == 0 -jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" -jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" +jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Evaluate RPC Input" jsonpath "$.result.resources[13].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[13].mimeType" == "application/schema+json" -jsonpath "$.result.resources[13].size" == 441 +jsonpath "$.result.resources[13].size" == 1566 jsonpath "$.result.resources[13].annotations.priority" == 0 -jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" -jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Dependencies RPC Input" -jsonpath "$.result.resources[14].description" == "Get all direct and indirect dependencies of a schema in the catalog" +jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" +jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[14].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[14].mimeType" == "application/schema+json" -jsonpath "$.result.resources[14].size" == 687 +jsonpath "$.result.resources[14].size" == 441 jsonpath "$.result.resources[14].annotations.priority" == 0 -jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" -jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" +jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Dependencies RPC Input" jsonpath "$.result.resources[15].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[15].mimeType" == "application/schema+json" -jsonpath "$.result.resources[15].size" == 741 +jsonpath "$.result.resources[15].size" == 687 jsonpath "$.result.resources[15].annotations.priority" == 0 -jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" -jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema Dependents RPC Input" -jsonpath "$.result.resources[16].description" == "Get all direct and transitive dependents of a schema in the catalog" +jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" +jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[16].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[16].mimeType" == "application/schema+json" -jsonpath "$.result.resources[16].size" == 683 +jsonpath "$.result.resources[16].size" == 741 jsonpath "$.result.resources[16].annotations.priority" == 0 -jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" -jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" +jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema Dependents RPC Input" jsonpath "$.result.resources[17].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[17].mimeType" == "application/schema+json" -jsonpath "$.result.resources[17].size" == 735 +jsonpath "$.result.resources[17].size" == 683 jsonpath "$.result.resources[17].annotations.priority" == 0 -jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" -jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema Health RPC Input" -jsonpath "$.result.resources[18].description" == "Get the health analysis and score of a schema in the catalog" +jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" +jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[18].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[18].mimeType" == "application/schema+json" -jsonpath "$.result.resources[18].size" == 668 +jsonpath "$.result.resources[18].size" == 735 jsonpath "$.result.resources[18].annotations.priority" == 0 -jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" -jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" +jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema Health RPC Input" jsonpath "$.result.resources[19].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[19].mimeType" == "application/schema+json" -jsonpath "$.result.resources[19].size" == 415 +jsonpath "$.result.resources[19].size" == 668 jsonpath "$.result.resources[19].annotations.priority" == 0 -jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" -jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Locations RPC Input" -jsonpath "$.result.resources[20].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" +jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" +jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[20].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[20].mimeType" == "application/schema+json" -jsonpath "$.result.resources[20].size" == 720 +jsonpath "$.result.resources[20].size" == 415 jsonpath "$.result.resources[20].annotations.priority" == 0 -jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" -jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" +jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Locations RPC Input" jsonpath "$.result.resources[21].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[21].mimeType" == "application/schema+json" -jsonpath "$.result.resources[21].size" == 471 +jsonpath "$.result.resources[21].size" == 720 jsonpath "$.result.resources[21].annotations.priority" == 0 -jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" -jsonpath "$.result.resources[22].name" == "Sourcemeta One Schema Metadata RPC Input" -jsonpath "$.result.resources[22].description" == "Get metadata information about a schema in the catalog" +jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" +jsonpath "$.result.resources[22].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[22].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[22].mimeType" == "application/schema+json" -jsonpath "$.result.resources[22].size" == 666 +jsonpath "$.result.resources[22].size" == 471 jsonpath "$.result.resources[22].annotations.priority" == 0 -jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" -jsonpath "$.result.resources[23].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" +jsonpath "$.result.resources[23].name" == "Sourcemeta One Schema Metadata RPC Input" jsonpath "$.result.resources[23].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[23].mimeType" == "application/schema+json" -jsonpath "$.result.resources[23].size" == 843 +jsonpath "$.result.resources[23].size" == 666 jsonpath "$.result.resources[23].annotations.priority" == 0 -jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" -jsonpath "$.result.resources[24].name" == "Sourcemeta One Schema Positions RPC Input" -jsonpath "$.result.resources[24].description" == "Get line and column position information for every token in a schema" +jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" +jsonpath "$.result.resources[24].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[24].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[24].mimeType" == "application/schema+json" -jsonpath "$.result.resources[24].size" == 682 +jsonpath "$.result.resources[24].size" == 843 jsonpath "$.result.resources[24].annotations.priority" == 0 -jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" -jsonpath "$.result.resources[25].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" +jsonpath "$.result.resources[25].name" == "Sourcemeta One Schema Positions RPC Input" jsonpath "$.result.resources[25].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[25].mimeType" == "application/schema+json" -jsonpath "$.result.resources[25].size" == 435 +jsonpath "$.result.resources[25].size" == 682 jsonpath "$.result.resources[25].annotations.priority" == 0 -jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" -jsonpath "$.result.resources[26].name" == "Sourcemeta One Schema Statistics RPC Input" -jsonpath "$.result.resources[26].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" +jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" +jsonpath "$.result.resources[26].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[26].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[26].mimeType" == "application/schema+json" -jsonpath "$.result.resources[26].size" == 703 +jsonpath "$.result.resources[26].size" == 435 jsonpath "$.result.resources[26].annotations.priority" == 0 -jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" -jsonpath "$.result.resources[27].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" +jsonpath "$.result.resources[27].name" == "Sourcemeta One Schema Statistics RPC Input" jsonpath "$.result.resources[27].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[27].mimeType" == "application/schema+json" -jsonpath "$.result.resources[27].size" == 709 +jsonpath "$.result.resources[27].size" == 703 jsonpath "$.result.resources[27].annotations.priority" == 0 -jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" -jsonpath "$.result.resources[28].name" == "Sourcemeta One Schema RDF RPC Input" -jsonpath "$.result.resources[28].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" +jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" +jsonpath "$.result.resources[28].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[28].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[28].mimeType" == "application/schema+json" -jsonpath "$.result.resources[28].size" == 2558 +jsonpath "$.result.resources[28].size" == 709 jsonpath "$.result.resources[28].annotations.priority" == 0 -jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" -jsonpath "$.result.resources[29].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" +jsonpath "$.result.resources[29].name" == "Sourcemeta One Schema RDF RPC Input" jsonpath "$.result.resources[29].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[29].mimeType" == "application/schema+json" -jsonpath "$.result.resources[29].size" == 1589 +jsonpath "$.result.resources[29].size" == 2558 jsonpath "$.result.resources[29].annotations.priority" == 0 -jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" -jsonpath "$.result.resources[30].name" == "Sourcemeta One Directory Listing RPC Input" -jsonpath "$.result.resources[30].description" == "List the contents of a directory in the catalog" +jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" +jsonpath "$.result.resources[30].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[30].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[30].mimeType" == "application/schema+json" -jsonpath "$.result.resources[30].size" == 549 +jsonpath "$.result.resources[30].size" == 1589 jsonpath "$.result.resources[30].annotations.priority" == 0 -jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" -jsonpath "$.result.resources[31].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" +jsonpath "$.result.resources[31].name" == "Sourcemeta One Directory Listing RPC Input" jsonpath "$.result.resources[31].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[31].mimeType" == "application/schema+json" -jsonpath "$.result.resources[31].size" == 609 +jsonpath "$.result.resources[31].size" == 549 jsonpath "$.result.resources[31].annotations.priority" == 0 -jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" -jsonpath "$.result.resources[32].name" == "Sourcemeta One MCP Tools Call Request" -jsonpath "$.result.resources[32].description" == "Request from a client to invoke an MCP tool by name" +jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" +jsonpath "$.result.resources[32].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[32].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[32].mimeType" == "application/schema+json" -jsonpath "$.result.resources[32].size" == 1161 +jsonpath "$.result.resources[32].size" == 609 jsonpath "$.result.resources[32].annotations.priority" == 0 -jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" -jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Tools Call Response" -jsonpath "$.result.resources[33].description" == "Sourcemeta One's response to a tool invocation" +jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" +jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Tools Call Request" +jsonpath "$.result.resources[33].description" == "Request from a client to invoke an MCP tool by name" jsonpath "$.result.resources[33].mimeType" == "application/schema+json" -jsonpath "$.result.resources[33].size" == 4668 +jsonpath "$.result.resources[33].size" == 1161 jsonpath "$.result.resources[33].annotations.priority" == 0 -jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" -jsonpath "$.result.resources[34].name" == "Sourcemeta One Schema Search RPC Input" -jsonpath "$.result.resources[34].description" == "Search for schemas in the catalog by query term" +jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" +jsonpath "$.result.resources[34].name" == "Sourcemeta One MCP Tools Call Response" +jsonpath "$.result.resources[34].description" == "Sourcemeta One's response to a tool invocation" jsonpath "$.result.resources[34].mimeType" == "application/schema+json" -jsonpath "$.result.resources[34].size" == 2155 +jsonpath "$.result.resources[34].size" == 4668 jsonpath "$.result.resources[34].annotations.priority" == 0 -jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" -jsonpath "$.result.resources[35].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" +jsonpath "$.result.resources[35].name" == "Sourcemeta One Schema Search RPC Input" jsonpath "$.result.resources[35].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[35].mimeType" == "application/schema+json" -jsonpath "$.result.resources[35].size" == 777 +jsonpath "$.result.resources[35].size" == 2155 jsonpath "$.result.resources[35].annotations.priority" == 0 -jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" -jsonpath "$.result.resources[36].name" == "Sourcemeta One Schema Trace RPC Input" -jsonpath "$.result.resources[36].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" +jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" +jsonpath "$.result.resources[36].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[36].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[36].mimeType" == "application/schema+json" -jsonpath "$.result.resources[36].size" == 1735 +jsonpath "$.result.resources[36].size" == 777 jsonpath "$.result.resources[36].annotations.priority" == 0 -jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" -jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" +jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Trace RPC Input" jsonpath "$.result.resources[37].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[37].mimeType" == "application/schema+json" -jsonpath "$.result.resources[37].size" == 497 +jsonpath "$.result.resources[37].size" == 1735 jsonpath "$.result.resources[37].annotations.priority" == 0 -jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" -jsonpath "$.result.resources[38].name" == "Sourcemeta One MCP Tools List Request" -jsonpath "$.result.resources[38].description" == "Request from a client to list MCP tools" +jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" +jsonpath "$.result.resources[38].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[38].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[38].mimeType" == "application/schema+json" -jsonpath "$.result.resources[38].size" == 853 +jsonpath "$.result.resources[38].size" == 497 jsonpath "$.result.resources[38].annotations.priority" == 0 -jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/response" -jsonpath "$.result.resources[39].name" == "Sourcemeta One MCP Tools List Response" -jsonpath "$.result.resources[39].description" == "Sourcemeta One's list of MCP tools" +jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" +jsonpath "$.result.resources[39].name" == "Sourcemeta One MCP Tools List Request" +jsonpath "$.result.resources[39].description" == "Request from a client to list MCP tools" jsonpath "$.result.resources[39].mimeType" == "application/schema+json" -jsonpath "$.result.resources[39].size" == 4495 -jsonpath "$.result.resources[39].annotations.priority" == 0.0 +jsonpath "$.result.resources[39].size" == 853 +jsonpath "$.result.resources[39].annotations.priority" == 0 +jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/response" +jsonpath "$.result.resources[40].name" == "Sourcemeta One MCP Tools List Response" +jsonpath "$.result.resources[40].description" == "Sourcemeta One's list of MCP tools" +jsonpath "$.result.resources[40].mimeType" == "application/schema+json" +jsonpath "$.result.resources[40].size" == 4495 +jsonpath "$.result.resources[40].annotations.priority" == 0 +jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/request" +jsonpath "$.result.resources[41].name" == "Sourcemeta One Playground Schema Trace API Request" +jsonpath "$.result.resources[41].description" == "A JSON instance and the schema to trace its evaluation against" +jsonpath "$.result.resources[41].mimeType" == "application/schema+json" +jsonpath "$.result.resources[41].size" == 1124 +jsonpath "$.result.resources[41].annotations.priority" == 0 jsonpath "$.result.nextCursor" not exists POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} @@ -988,247 +1000,259 @@ header "X-Frame-Options" not exists header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ jsonpath "$.jsonrpc" == "2.0" jsonpath "$.id" == "rlist-gzip" -jsonpath "$.result.resources" count == 40 -jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" -jsonpath "$.result.resources[0].name" == "Sourcemeta One MCP Initialized Notification" -jsonpath "$.result.resources[0].description" == "Client signal that the handshake is complete and normal operation may begin" +jsonpath "$.result.resources" count == 42 +jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" +jsonpath "$.result.resources[0].name" == "Sourcemeta One MCP Cancelled Notification" +jsonpath "$.result.resources[0].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" jsonpath "$.result.resources[0].mimeType" == "application/schema+json" -jsonpath "$.result.resources[0].size" == 740 +jsonpath "$.result.resources[0].size" == 1163 jsonpath "$.result.resources[0].annotations.priority" == 0 -jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" -jsonpath "$.result.resources[1].name" == "Sourcemeta One MCP Ping Request" -jsonpath "$.result.resources[1].description" == "Liveness check from a client" +jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" +jsonpath "$.result.resources[1].name" == "Sourcemeta One MCP Initialized Notification" +jsonpath "$.result.resources[1].description" == "Client signal that the handshake is complete and normal operation may begin" jsonpath "$.result.resources[1].mimeType" == "application/schema+json" -jsonpath "$.result.resources[1].size" == 695 +jsonpath "$.result.resources[1].size" == 740 jsonpath "$.result.resources[1].annotations.priority" == 0 -jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" -jsonpath "$.result.resources[2].name" == "Sourcemeta One MCP Ping Response" -jsonpath "$.result.resources[2].description" == "Sourcemeta One's response to a liveness check" +jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" +jsonpath "$.result.resources[2].name" == "Sourcemeta One MCP Ping Request" +jsonpath "$.result.resources[2].description" == "Liveness check from a client" jsonpath "$.result.resources[2].mimeType" == "application/schema+json" -jsonpath "$.result.resources[2].size" == 598 +jsonpath "$.result.resources[2].size" == 695 jsonpath "$.result.resources[2].annotations.priority" == 0 -jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" -jsonpath "$.result.resources[3].name" == "Sourcemeta One MCP Protected Resource Metadata Response" -jsonpath "$.result.resources[3].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" +jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" +jsonpath "$.result.resources[3].name" == "Sourcemeta One MCP Ping Response" +jsonpath "$.result.resources[3].description" == "Sourcemeta One's response to a liveness check" jsonpath "$.result.resources[3].mimeType" == "application/schema+json" -jsonpath "$.result.resources[3].size" == 2176 +jsonpath "$.result.resources[3].size" == 598 jsonpath "$.result.resources[3].annotations.priority" == 0 -jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/request" -jsonpath "$.result.resources[4].name" == "Sourcemeta One MCP Request" -jsonpath "$.result.resources[4].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" +jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" +jsonpath "$.result.resources[4].name" == "Sourcemeta One MCP Protected Resource Metadata Response" +jsonpath "$.result.resources[4].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" jsonpath "$.result.resources[4].mimeType" == "application/schema+json" -jsonpath "$.result.resources[4].size" == 2520 +jsonpath "$.result.resources[4].size" == 2176 jsonpath "$.result.resources[4].annotations.priority" == 0 -jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" -jsonpath "$.result.resources[5].name" == "Sourcemeta One MCP Resources List Request" -jsonpath "$.result.resources[5].description" == "Request from a client to list MCP resources" +jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/request" +jsonpath "$.result.resources[5].name" == "Sourcemeta One MCP Request" +jsonpath "$.result.resources[5].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" jsonpath "$.result.resources[5].mimeType" == "application/schema+json" -jsonpath "$.result.resources[5].size" == 1071 +jsonpath "$.result.resources[5].size" == 2520 jsonpath "$.result.resources[5].annotations.priority" == 0 -jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" -jsonpath "$.result.resources[6].name" == "Sourcemeta One MCP Resources List Response" -jsonpath "$.result.resources[6].description" == "Sourcemeta One's list of MCP resources" +jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" +jsonpath "$.result.resources[6].name" == "Sourcemeta One MCP Resources List Request" +jsonpath "$.result.resources[6].description" == "Request from a client to list MCP resources" jsonpath "$.result.resources[6].mimeType" == "application/schema+json" -jsonpath "$.result.resources[6].size" == 3062 +jsonpath "$.result.resources[6].size" == 1071 jsonpath "$.result.resources[6].annotations.priority" == 0 -jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" -jsonpath "$.result.resources[7].name" == "Sourcemeta One MCP Resources Read Request" -jsonpath "$.result.resources[7].description" == "Request from a client to read an MCP resource" +jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" +jsonpath "$.result.resources[7].name" == "Sourcemeta One MCP Resources List Response" +jsonpath "$.result.resources[7].description" == "Sourcemeta One's list of MCP resources" jsonpath "$.result.resources[7].mimeType" == "application/schema+json" -jsonpath "$.result.resources[7].size" == 1293 +jsonpath "$.result.resources[7].size" == 3062 jsonpath "$.result.resources[7].annotations.priority" == 0 -jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" -jsonpath "$.result.resources[8].name" == "Sourcemeta One MCP Resources Read Response" -jsonpath "$.result.resources[8].description" == "Sourcemeta One's response containing an MCP resource" +jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" +jsonpath "$.result.resources[8].name" == "Sourcemeta One MCP Resources Read Request" +jsonpath "$.result.resources[8].description" == "Request from a client to read an MCP resource" jsonpath "$.result.resources[8].mimeType" == "application/schema+json" -jsonpath "$.result.resources[8].size" == 1754 +jsonpath "$.result.resources[8].size" == 1293 jsonpath "$.result.resources[8].annotations.priority" == 0 -jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" -jsonpath "$.result.resources[9].name" == "Sourcemeta One MCP Resources Templates List Request" -jsonpath "$.result.resources[9].description" == "Request from a client to list MCP resource templates" +jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" +jsonpath "$.result.resources[9].name" == "Sourcemeta One MCP Resources Read Response" +jsonpath "$.result.resources[9].description" == "Sourcemeta One's response containing an MCP resource" jsonpath "$.result.resources[9].mimeType" == "application/schema+json" -jsonpath "$.result.resources[9].size" == 922 +jsonpath "$.result.resources[9].size" == 1754 jsonpath "$.result.resources[9].annotations.priority" == 0 -jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" -jsonpath "$.result.resources[10].name" == "Sourcemeta One MCP Resources Templates List Response" -jsonpath "$.result.resources[10].description" == "Sourcemeta One's list of MCP resource templates" +jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" +jsonpath "$.result.resources[10].name" == "Sourcemeta One MCP Resources Templates List Request" +jsonpath "$.result.resources[10].description" == "Request from a client to list MCP resource templates" jsonpath "$.result.resources[10].mimeType" == "application/schema+json" -jsonpath "$.result.resources[10].size" == 2927 +jsonpath "$.result.resources[10].size" == 922 jsonpath "$.result.resources[10].annotations.priority" == 0 -jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/response" -jsonpath "$.result.resources[11].name" == "Sourcemeta One MCP Response" -jsonpath "$.result.resources[11].description" == "Any outgoing MCP response the server returns" +jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" +jsonpath "$.result.resources[11].name" == "Sourcemeta One MCP Resources Templates List Response" +jsonpath "$.result.resources[11].description" == "Sourcemeta One's list of MCP resource templates" jsonpath "$.result.resources[11].mimeType" == "application/schema+json" -jsonpath "$.result.resources[11].size" == 4799 +jsonpath "$.result.resources[11].size" == 2927 jsonpath "$.result.resources[11].annotations.priority" == 0 -jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" -jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Evaluate RPC Input" -jsonpath "$.result.resources[12].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" +jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/response" +jsonpath "$.result.resources[12].name" == "Sourcemeta One MCP Response" +jsonpath "$.result.resources[12].description" == "Any outgoing MCP response the server returns" jsonpath "$.result.resources[12].mimeType" == "application/schema+json" -jsonpath "$.result.resources[12].size" == 1566 +jsonpath "$.result.resources[12].size" == 4799 jsonpath "$.result.resources[12].annotations.priority" == 0 -jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" -jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" +jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Evaluate RPC Input" jsonpath "$.result.resources[13].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[13].mimeType" == "application/schema+json" -jsonpath "$.result.resources[13].size" == 441 +jsonpath "$.result.resources[13].size" == 1566 jsonpath "$.result.resources[13].annotations.priority" == 0 -jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" -jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Dependencies RPC Input" -jsonpath "$.result.resources[14].description" == "Get all direct and indirect dependencies of a schema in the catalog" +jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" +jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[14].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[14].mimeType" == "application/schema+json" -jsonpath "$.result.resources[14].size" == 687 +jsonpath "$.result.resources[14].size" == 441 jsonpath "$.result.resources[14].annotations.priority" == 0 -jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" -jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" +jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Dependencies RPC Input" jsonpath "$.result.resources[15].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[15].mimeType" == "application/schema+json" -jsonpath "$.result.resources[15].size" == 741 +jsonpath "$.result.resources[15].size" == 687 jsonpath "$.result.resources[15].annotations.priority" == 0 -jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" -jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema Dependents RPC Input" -jsonpath "$.result.resources[16].description" == "Get all direct and transitive dependents of a schema in the catalog" +jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" +jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[16].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[16].mimeType" == "application/schema+json" -jsonpath "$.result.resources[16].size" == 683 +jsonpath "$.result.resources[16].size" == 741 jsonpath "$.result.resources[16].annotations.priority" == 0 -jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" -jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" +jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema Dependents RPC Input" jsonpath "$.result.resources[17].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[17].mimeType" == "application/schema+json" -jsonpath "$.result.resources[17].size" == 735 +jsonpath "$.result.resources[17].size" == 683 jsonpath "$.result.resources[17].annotations.priority" == 0 -jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" -jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema Health RPC Input" -jsonpath "$.result.resources[18].description" == "Get the health analysis and score of a schema in the catalog" +jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" +jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[18].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[18].mimeType" == "application/schema+json" -jsonpath "$.result.resources[18].size" == 668 +jsonpath "$.result.resources[18].size" == 735 jsonpath "$.result.resources[18].annotations.priority" == 0 -jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" -jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" +jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema Health RPC Input" jsonpath "$.result.resources[19].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[19].mimeType" == "application/schema+json" -jsonpath "$.result.resources[19].size" == 415 +jsonpath "$.result.resources[19].size" == 668 jsonpath "$.result.resources[19].annotations.priority" == 0 -jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" -jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Locations RPC Input" -jsonpath "$.result.resources[20].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" +jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" +jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[20].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[20].mimeType" == "application/schema+json" -jsonpath "$.result.resources[20].size" == 720 +jsonpath "$.result.resources[20].size" == 415 jsonpath "$.result.resources[20].annotations.priority" == 0 -jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" -jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" +jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Locations RPC Input" jsonpath "$.result.resources[21].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[21].mimeType" == "application/schema+json" -jsonpath "$.result.resources[21].size" == 471 +jsonpath "$.result.resources[21].size" == 720 jsonpath "$.result.resources[21].annotations.priority" == 0 -jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" -jsonpath "$.result.resources[22].name" == "Sourcemeta One Schema Metadata RPC Input" -jsonpath "$.result.resources[22].description" == "Get metadata information about a schema in the catalog" +jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" +jsonpath "$.result.resources[22].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[22].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[22].mimeType" == "application/schema+json" -jsonpath "$.result.resources[22].size" == 666 +jsonpath "$.result.resources[22].size" == 471 jsonpath "$.result.resources[22].annotations.priority" == 0 -jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" -jsonpath "$.result.resources[23].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" +jsonpath "$.result.resources[23].name" == "Sourcemeta One Schema Metadata RPC Input" jsonpath "$.result.resources[23].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[23].mimeType" == "application/schema+json" -jsonpath "$.result.resources[23].size" == 843 +jsonpath "$.result.resources[23].size" == 666 jsonpath "$.result.resources[23].annotations.priority" == 0 -jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" -jsonpath "$.result.resources[24].name" == "Sourcemeta One Schema Positions RPC Input" -jsonpath "$.result.resources[24].description" == "Get line and column position information for every token in a schema" +jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" +jsonpath "$.result.resources[24].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[24].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[24].mimeType" == "application/schema+json" -jsonpath "$.result.resources[24].size" == 682 +jsonpath "$.result.resources[24].size" == 843 jsonpath "$.result.resources[24].annotations.priority" == 0 -jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" -jsonpath "$.result.resources[25].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" +jsonpath "$.result.resources[25].name" == "Sourcemeta One Schema Positions RPC Input" jsonpath "$.result.resources[25].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[25].mimeType" == "application/schema+json" -jsonpath "$.result.resources[25].size" == 435 +jsonpath "$.result.resources[25].size" == 682 jsonpath "$.result.resources[25].annotations.priority" == 0 -jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" -jsonpath "$.result.resources[26].name" == "Sourcemeta One Schema Statistics RPC Input" -jsonpath "$.result.resources[26].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" +jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" +jsonpath "$.result.resources[26].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[26].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[26].mimeType" == "application/schema+json" -jsonpath "$.result.resources[26].size" == 703 +jsonpath "$.result.resources[26].size" == 435 jsonpath "$.result.resources[26].annotations.priority" == 0 -jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" -jsonpath "$.result.resources[27].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" +jsonpath "$.result.resources[27].name" == "Sourcemeta One Schema Statistics RPC Input" jsonpath "$.result.resources[27].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[27].mimeType" == "application/schema+json" -jsonpath "$.result.resources[27].size" == 709 +jsonpath "$.result.resources[27].size" == 703 jsonpath "$.result.resources[27].annotations.priority" == 0 -jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" -jsonpath "$.result.resources[28].name" == "Sourcemeta One Schema RDF RPC Input" -jsonpath "$.result.resources[28].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" +jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" +jsonpath "$.result.resources[28].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[28].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[28].mimeType" == "application/schema+json" -jsonpath "$.result.resources[28].size" == 2558 +jsonpath "$.result.resources[28].size" == 709 jsonpath "$.result.resources[28].annotations.priority" == 0 -jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" -jsonpath "$.result.resources[29].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" +jsonpath "$.result.resources[29].name" == "Sourcemeta One Schema RDF RPC Input" jsonpath "$.result.resources[29].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[29].mimeType" == "application/schema+json" -jsonpath "$.result.resources[29].size" == 1589 +jsonpath "$.result.resources[29].size" == 2558 jsonpath "$.result.resources[29].annotations.priority" == 0 -jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" -jsonpath "$.result.resources[30].name" == "Sourcemeta One Directory Listing RPC Input" -jsonpath "$.result.resources[30].description" == "List the contents of a directory in the catalog" +jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" +jsonpath "$.result.resources[30].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[30].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[30].mimeType" == "application/schema+json" -jsonpath "$.result.resources[30].size" == 549 +jsonpath "$.result.resources[30].size" == 1589 jsonpath "$.result.resources[30].annotations.priority" == 0 -jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" -jsonpath "$.result.resources[31].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" +jsonpath "$.result.resources[31].name" == "Sourcemeta One Directory Listing RPC Input" jsonpath "$.result.resources[31].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[31].mimeType" == "application/schema+json" -jsonpath "$.result.resources[31].size" == 609 +jsonpath "$.result.resources[31].size" == 549 jsonpath "$.result.resources[31].annotations.priority" == 0 -jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" -jsonpath "$.result.resources[32].name" == "Sourcemeta One MCP Tools Call Request" -jsonpath "$.result.resources[32].description" == "Request from a client to invoke an MCP tool by name" +jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" +jsonpath "$.result.resources[32].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[32].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[32].mimeType" == "application/schema+json" -jsonpath "$.result.resources[32].size" == 1161 +jsonpath "$.result.resources[32].size" == 609 jsonpath "$.result.resources[32].annotations.priority" == 0 -jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" -jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Tools Call Response" -jsonpath "$.result.resources[33].description" == "Sourcemeta One's response to a tool invocation" +jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" +jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Tools Call Request" +jsonpath "$.result.resources[33].description" == "Request from a client to invoke an MCP tool by name" jsonpath "$.result.resources[33].mimeType" == "application/schema+json" -jsonpath "$.result.resources[33].size" == 4668 +jsonpath "$.result.resources[33].size" == 1161 jsonpath "$.result.resources[33].annotations.priority" == 0 -jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" -jsonpath "$.result.resources[34].name" == "Sourcemeta One Schema Search RPC Input" -jsonpath "$.result.resources[34].description" == "Search for schemas in the catalog by query term" +jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" +jsonpath "$.result.resources[34].name" == "Sourcemeta One MCP Tools Call Response" +jsonpath "$.result.resources[34].description" == "Sourcemeta One's response to a tool invocation" jsonpath "$.result.resources[34].mimeType" == "application/schema+json" -jsonpath "$.result.resources[34].size" == 2155 +jsonpath "$.result.resources[34].size" == 4668 jsonpath "$.result.resources[34].annotations.priority" == 0 -jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" -jsonpath "$.result.resources[35].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" +jsonpath "$.result.resources[35].name" == "Sourcemeta One Schema Search RPC Input" jsonpath "$.result.resources[35].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[35].mimeType" == "application/schema+json" -jsonpath "$.result.resources[35].size" == 777 +jsonpath "$.result.resources[35].size" == 2155 jsonpath "$.result.resources[35].annotations.priority" == 0 -jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" -jsonpath "$.result.resources[36].name" == "Sourcemeta One Schema Trace RPC Input" -jsonpath "$.result.resources[36].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" +jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" +jsonpath "$.result.resources[36].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[36].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[36].mimeType" == "application/schema+json" -jsonpath "$.result.resources[36].size" == 1735 +jsonpath "$.result.resources[36].size" == 777 jsonpath "$.result.resources[36].annotations.priority" == 0 -jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" -jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" +jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Trace RPC Input" jsonpath "$.result.resources[37].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[37].mimeType" == "application/schema+json" -jsonpath "$.result.resources[37].size" == 497 +jsonpath "$.result.resources[37].size" == 1735 jsonpath "$.result.resources[37].annotations.priority" == 0 -jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" -jsonpath "$.result.resources[38].name" == "Sourcemeta One MCP Tools List Request" -jsonpath "$.result.resources[38].description" == "Request from a client to list MCP tools" +jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" +jsonpath "$.result.resources[38].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[38].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[38].mimeType" == "application/schema+json" -jsonpath "$.result.resources[38].size" == 853 +jsonpath "$.result.resources[38].size" == 497 jsonpath "$.result.resources[38].annotations.priority" == 0 -jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/response" -jsonpath "$.result.resources[39].name" == "Sourcemeta One MCP Tools List Response" -jsonpath "$.result.resources[39].description" == "Sourcemeta One's list of MCP tools" +jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" +jsonpath "$.result.resources[39].name" == "Sourcemeta One MCP Tools List Request" +jsonpath "$.result.resources[39].description" == "Request from a client to list MCP tools" jsonpath "$.result.resources[39].mimeType" == "application/schema+json" -jsonpath "$.result.resources[39].size" == 4495 -jsonpath "$.result.resources[39].annotations.priority" == 0.0 +jsonpath "$.result.resources[39].size" == 853 +jsonpath "$.result.resources[39].annotations.priority" == 0 +jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/response" +jsonpath "$.result.resources[40].name" == "Sourcemeta One MCP Tools List Response" +jsonpath "$.result.resources[40].description" == "Sourcemeta One's list of MCP tools" +jsonpath "$.result.resources[40].mimeType" == "application/schema+json" +jsonpath "$.result.resources[40].size" == 4495 +jsonpath "$.result.resources[40].annotations.priority" == 0 +jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/request" +jsonpath "$.result.resources[41].name" == "Sourcemeta One Playground Schema Trace API Request" +jsonpath "$.result.resources[41].description" == "A JSON instance and the schema to trace its evaluation against" +jsonpath "$.result.resources[41].mimeType" == "application/schema+json" +jsonpath "$.result.resources[41].size" == 1124 +jsonpath "$.result.resources[41].annotations.priority" == 0 jsonpath "$.result.nextCursor" not exists POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} diff --git a/enterprise/e2e/html/hurl/mcp-2025-11-25-list_directory.all.hurl b/enterprise/e2e/html/hurl/mcp-2025-11-25-list_directory.all.hurl index 75bf43129..38366e131 100644 --- a/enterprise/e2e/html/hurl/mcp-2025-11-25-list_directory.all.hurl +++ b/enterprise/e2e/html/hurl/mcp-2025-11-25-list_directory.all.hurl @@ -122,8 +122,8 @@ jsonpath "$.result.structuredContent.url" == "{{base}}" variable "text" jsonpath "$.url" == "{{base}}" jsonpath "$.result.structuredContent.breadcrumb" count == 0 variable "text" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.result.structuredContent.schemas" == 140 -variable "text" jsonpath "$.schemas" == 140 +jsonpath "$.result.structuredContent.schemas" == 142 +variable "text" jsonpath "$.schemas" == 142 jsonpath "$.result.structuredContent.entries" count == 4 jsonpath "$.result.structuredContent.private" == false variable "text" jsonpath "$.entries" count == 4 @@ -150,10 +150,10 @@ jsonpath "$.result.structuredContent.entries[1].description" == "The schemas tha variable "text" jsonpath "$.entries[1].description" == "The schemas that define the current version of this instance" jsonpath "$.result.structuredContent.entries[1].type" == "directory" variable "text" jsonpath "$.entries[1].type" == "directory" -jsonpath "$.result.structuredContent.entries[1].health" == 100 -variable "text" jsonpath "$.entries[1].health" == 100 -jsonpath "$.result.structuredContent.entries[1].schemas" == 63 -variable "text" jsonpath "$.entries[1].schemas" == 63 +jsonpath "$.result.structuredContent.entries[1].health" == 99 +variable "text" jsonpath "$.entries[1].health" == 99 +jsonpath "$.result.structuredContent.entries[1].schemas" == 65 +variable "text" jsonpath "$.entries[1].schemas" == 65 jsonpath "$.result.structuredContent.entries[1].path" == "/self/" variable "text" jsonpath "$.entries[1].path" == "/self/" jsonpath "$.result.structuredContent.entries[2].name" == "test" @@ -257,8 +257,8 @@ jsonpath "$.result.structuredContent.url" == "{{base}}" variable "text" jsonpath "$.url" == "{{base}}" jsonpath "$.result.structuredContent.breadcrumb" count == 0 variable "text" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.result.structuredContent.schemas" == 140 -variable "text" jsonpath "$.schemas" == 140 +jsonpath "$.result.structuredContent.schemas" == 142 +variable "text" jsonpath "$.schemas" == 142 jsonpath "$.result.structuredContent.entries" count == 4 jsonpath "$.result.structuredContent.private" == false variable "text" jsonpath "$.entries" count == 4 @@ -285,10 +285,10 @@ jsonpath "$.result.structuredContent.entries[1].description" == "The schemas tha variable "text" jsonpath "$.entries[1].description" == "The schemas that define the current version of this instance" jsonpath "$.result.structuredContent.entries[1].type" == "directory" variable "text" jsonpath "$.entries[1].type" == "directory" -jsonpath "$.result.structuredContent.entries[1].health" == 100 -variable "text" jsonpath "$.entries[1].health" == 100 -jsonpath "$.result.structuredContent.entries[1].schemas" == 63 -variable "text" jsonpath "$.entries[1].schemas" == 63 +jsonpath "$.result.structuredContent.entries[1].health" == 99 +variable "text" jsonpath "$.entries[1].health" == 99 +jsonpath "$.result.structuredContent.entries[1].schemas" == 65 +variable "text" jsonpath "$.entries[1].schemas" == 65 jsonpath "$.result.structuredContent.entries[1].path" == "/self/" variable "text" jsonpath "$.entries[1].path" == "/self/" jsonpath "$.result.structuredContent.entries[2].name" == "test" @@ -392,8 +392,8 @@ jsonpath "$.result.structuredContent.url" == "{{base}}" variable "text" jsonpath "$.url" == "{{base}}" jsonpath "$.result.structuredContent.breadcrumb" count == 0 variable "text" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.result.structuredContent.schemas" == 140 -variable "text" jsonpath "$.schemas" == 140 +jsonpath "$.result.structuredContent.schemas" == 142 +variable "text" jsonpath "$.schemas" == 142 jsonpath "$.result.structuredContent.entries" count == 4 jsonpath "$.result.structuredContent.private" == false variable "text" jsonpath "$.entries" count == 4 @@ -416,10 +416,10 @@ variable "text" jsonpath "$.entries[1].name" == "self" variable "text" jsonpath "$.entries[1].private" == false jsonpath "$.result.structuredContent.entries[1].type" == "directory" variable "text" jsonpath "$.entries[1].type" == "directory" -jsonpath "$.result.structuredContent.entries[1].health" == 100 -variable "text" jsonpath "$.entries[1].health" == 100 -jsonpath "$.result.structuredContent.entries[1].schemas" == 63 -variable "text" jsonpath "$.entries[1].schemas" == 63 +jsonpath "$.result.structuredContent.entries[1].health" == 99 +variable "text" jsonpath "$.entries[1].health" == 99 +jsonpath "$.result.structuredContent.entries[1].schemas" == 65 +variable "text" jsonpath "$.entries[1].schemas" == 65 jsonpath "$.result.structuredContent.entries[1].path" == "/self/" variable "text" jsonpath "$.entries[1].path" == "/self/" jsonpath "$.result.structuredContent.entries[1].title" == "Self" @@ -2301,10 +2301,10 @@ jsonpath "$.result.structuredContent.breadcrumb[0].name" == "self" variable "text" jsonpath "$.breadcrumb[0].name" == "self" jsonpath "$.result.structuredContent.breadcrumb[0].path" == "/self/" variable "text" jsonpath "$.breadcrumb[0].path" == "/self/" -jsonpath "$.result.structuredContent.schemas" == 63 -variable "text" jsonpath "$.schemas" == 63 -jsonpath "$.result.structuredContent.health" == 100 -variable "text" jsonpath "$.health" == 100 +jsonpath "$.result.structuredContent.schemas" == 65 +variable "text" jsonpath "$.schemas" == 65 +jsonpath "$.result.structuredContent.health" == 99 +variable "text" jsonpath "$.health" == 99 jsonpath "$.result.structuredContent.entries" count == 1 jsonpath "$.result.structuredContent.private" == false variable "text" jsonpath "$.entries" count == 1 @@ -2315,10 +2315,10 @@ variable "text" jsonpath "$.entries[0].name" == "v1" variable "text" jsonpath "$.entries[0].private" == false jsonpath "$.result.structuredContent.entries[0].type" == "directory" variable "text" jsonpath "$.entries[0].type" == "directory" -jsonpath "$.result.structuredContent.entries[0].health" == 100 -variable "text" jsonpath "$.entries[0].health" == 100 -jsonpath "$.result.structuredContent.entries[0].schemas" == 63 -variable "text" jsonpath "$.entries[0].schemas" == 63 +jsonpath "$.result.structuredContent.entries[0].health" == 99 +variable "text" jsonpath "$.entries[0].health" == 99 +jsonpath "$.result.structuredContent.entries[0].schemas" == 65 +variable "text" jsonpath "$.entries[0].schemas" == 65 jsonpath "$.result.structuredContent.entries[0].path" == "/self/v1/" variable "text" jsonpath "$.entries[0].path" == "/self/v1/" @@ -3037,8 +3037,8 @@ jsonpath "$.result.structuredContent.url" == "{{base}}" variable "text" jsonpath "$.url" == "{{base}}" jsonpath "$.result.structuredContent.breadcrumb" count == 0 variable "text" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.result.structuredContent.schemas" == 140 -variable "text" jsonpath "$.schemas" == 140 +jsonpath "$.result.structuredContent.schemas" == 142 +variable "text" jsonpath "$.schemas" == 142 jsonpath "$.result.structuredContent.entries" count == 4 jsonpath "$.result.structuredContent.private" == false variable "text" jsonpath "$.entries" count == 4 @@ -3065,10 +3065,10 @@ jsonpath "$.result.structuredContent.entries[1].description" == "The schemas tha variable "text" jsonpath "$.entries[1].description" == "The schemas that define the current version of this instance" jsonpath "$.result.structuredContent.entries[1].type" == "directory" variable "text" jsonpath "$.entries[1].type" == "directory" -jsonpath "$.result.structuredContent.entries[1].health" == 100 -variable "text" jsonpath "$.entries[1].health" == 100 -jsonpath "$.result.structuredContent.entries[1].schemas" == 63 -variable "text" jsonpath "$.entries[1].schemas" == 63 +jsonpath "$.result.structuredContent.entries[1].health" == 99 +variable "text" jsonpath "$.entries[1].health" == 99 +jsonpath "$.result.structuredContent.entries[1].schemas" == 65 +variable "text" jsonpath "$.entries[1].schemas" == 65 jsonpath "$.result.structuredContent.entries[1].path" == "/self/" variable "text" jsonpath "$.entries[1].path" == "/self/" jsonpath "$.result.structuredContent.entries[2].name" == "test" @@ -3172,8 +3172,8 @@ jsonpath "$.result.structuredContent.url" == "{{base}}" variable "text" jsonpath "$.url" == "{{base}}" jsonpath "$.result.structuredContent.breadcrumb" count == 0 variable "text" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.result.structuredContent.schemas" == 140 -variable "text" jsonpath "$.schemas" == 140 +jsonpath "$.result.structuredContent.schemas" == 142 +variable "text" jsonpath "$.schemas" == 142 jsonpath "$.result.structuredContent.entries" count == 4 jsonpath "$.result.structuredContent.private" == false variable "text" jsonpath "$.entries" count == 4 @@ -3200,10 +3200,10 @@ jsonpath "$.result.structuredContent.entries[1].description" == "The schemas tha variable "text" jsonpath "$.entries[1].description" == "The schemas that define the current version of this instance" jsonpath "$.result.structuredContent.entries[1].type" == "directory" variable "text" jsonpath "$.entries[1].type" == "directory" -jsonpath "$.result.structuredContent.entries[1].health" == 100 -variable "text" jsonpath "$.entries[1].health" == 100 -jsonpath "$.result.structuredContent.entries[1].schemas" == 63 -variable "text" jsonpath "$.entries[1].schemas" == 63 +jsonpath "$.result.structuredContent.entries[1].health" == 99 +variable "text" jsonpath "$.entries[1].health" == 99 +jsonpath "$.result.structuredContent.entries[1].schemas" == 65 +variable "text" jsonpath "$.entries[1].schemas" == 65 jsonpath "$.result.structuredContent.entries[1].path" == "/self/" variable "text" jsonpath "$.entries[1].path" == "/self/" jsonpath "$.result.structuredContent.entries[2].name" == "test" @@ -3307,8 +3307,8 @@ jsonpath "$.result.structuredContent.url" == "{{base}}" variable "text" jsonpath "$.url" == "{{base}}" jsonpath "$.result.structuredContent.breadcrumb" count == 0 variable "text" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.result.structuredContent.schemas" == 140 -variable "text" jsonpath "$.schemas" == 140 +jsonpath "$.result.structuredContent.schemas" == 142 +variable "text" jsonpath "$.schemas" == 142 jsonpath "$.result.structuredContent.entries" count == 4 jsonpath "$.result.structuredContent.private" == false variable "text" jsonpath "$.entries" count == 4 @@ -3335,10 +3335,10 @@ jsonpath "$.result.structuredContent.entries[1].description" == "The schemas tha variable "text" jsonpath "$.entries[1].description" == "The schemas that define the current version of this instance" jsonpath "$.result.structuredContent.entries[1].type" == "directory" variable "text" jsonpath "$.entries[1].type" == "directory" -jsonpath "$.result.structuredContent.entries[1].health" == 100 -variable "text" jsonpath "$.entries[1].health" == 100 -jsonpath "$.result.structuredContent.entries[1].schemas" == 63 -variable "text" jsonpath "$.entries[1].schemas" == 63 +jsonpath "$.result.structuredContent.entries[1].health" == 99 +variable "text" jsonpath "$.entries[1].health" == 99 +jsonpath "$.result.structuredContent.entries[1].schemas" == 65 +variable "text" jsonpath "$.entries[1].schemas" == 65 jsonpath "$.result.structuredContent.entries[1].path" == "/self/" variable "text" jsonpath "$.entries[1].path" == "/self/" jsonpath "$.result.structuredContent.entries[2].name" == "test" @@ -3442,8 +3442,8 @@ jsonpath "$.result.structuredContent.url" == "{{base}}" variable "text" jsonpath "$.url" == "{{base}}" jsonpath "$.result.structuredContent.breadcrumb" count == 0 variable "text" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.result.structuredContent.schemas" == 140 -variable "text" jsonpath "$.schemas" == 140 +jsonpath "$.result.structuredContent.schemas" == 142 +variable "text" jsonpath "$.schemas" == 142 jsonpath "$.result.structuredContent.entries" count == 4 jsonpath "$.result.structuredContent.private" == false variable "text" jsonpath "$.entries" count == 4 @@ -3466,10 +3466,10 @@ variable "text" jsonpath "$.entries[1].name" == "self" variable "text" jsonpath "$.entries[1].private" == false jsonpath "$.result.structuredContent.entries[1].type" == "directory" variable "text" jsonpath "$.entries[1].type" == "directory" -jsonpath "$.result.structuredContent.entries[1].health" == 100 -variable "text" jsonpath "$.entries[1].health" == 100 -jsonpath "$.result.structuredContent.entries[1].schemas" == 63 -variable "text" jsonpath "$.entries[1].schemas" == 63 +jsonpath "$.result.structuredContent.entries[1].health" == 99 +variable "text" jsonpath "$.entries[1].health" == 99 +jsonpath "$.result.structuredContent.entries[1].schemas" == 65 +variable "text" jsonpath "$.entries[1].schemas" == 65 jsonpath "$.result.structuredContent.entries[1].path" == "/self/" variable "text" jsonpath "$.entries[1].path" == "/self/" jsonpath "$.result.structuredContent.entries[1].title" == "Self" @@ -3577,8 +3577,8 @@ jsonpath "$.result.structuredContent.url" == "{{base}}" variable "text" jsonpath "$.url" == "{{base}}" jsonpath "$.result.structuredContent.breadcrumb" count == 0 variable "text" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.result.structuredContent.schemas" == 140 -variable "text" jsonpath "$.schemas" == 140 +jsonpath "$.result.structuredContent.schemas" == 142 +variable "text" jsonpath "$.schemas" == 142 jsonpath "$.result.structuredContent.entries" count == 4 jsonpath "$.result.structuredContent.private" == false variable "text" jsonpath "$.entries" count == 4 @@ -3601,10 +3601,10 @@ variable "text" jsonpath "$.entries[1].name" == "self" variable "text" jsonpath "$.entries[1].private" == false jsonpath "$.result.structuredContent.entries[1].type" == "directory" variable "text" jsonpath "$.entries[1].type" == "directory" -jsonpath "$.result.structuredContent.entries[1].health" == 100 -variable "text" jsonpath "$.entries[1].health" == 100 -jsonpath "$.result.structuredContent.entries[1].schemas" == 63 -variable "text" jsonpath "$.entries[1].schemas" == 63 +jsonpath "$.result.structuredContent.entries[1].health" == 99 +variable "text" jsonpath "$.entries[1].health" == 99 +jsonpath "$.result.structuredContent.entries[1].schemas" == 65 +variable "text" jsonpath "$.entries[1].schemas" == 65 jsonpath "$.result.structuredContent.entries[1].path" == "/self/" variable "text" jsonpath "$.entries[1].path" == "/self/" jsonpath "$.result.structuredContent.entries[1].title" == "Self" diff --git a/enterprise/e2e/html/hurl/mcp-2025-11-25-resources.all.hurl b/enterprise/e2e/html/hurl/mcp-2025-11-25-resources.all.hurl index 447e653b1..9981f65e2 100644 --- a/enterprise/e2e/html/hurl/mcp-2025-11-25-resources.all.hurl +++ b/enterprise/e2e/html/hurl/mcp-2025-11-25-resources.all.hurl @@ -490,7 +490,7 @@ jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/api/error" jsonpath "$.result.resources[28].name" == "Sourcemeta One API Error" jsonpath "$.result.resources[28].description" == "The error response format returned by the Sourcemeta One API endpoints" jsonpath "$.result.resources[28].mimeType" == "application/schema+json" -jsonpath "$.result.resources[28].size" == 9525 +jsonpath "$.result.resources[28].size" == 11208 jsonpath "$.result.resources[28].annotations.priority" == 0 jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/api/list/response" jsonpath "$.result.resources[29].name" == "Sourcemeta One List API Response" @@ -498,125 +498,125 @@ jsonpath "$.result.resources[29].description" == "The response format for the di jsonpath "$.result.resources[29].mimeType" == "application/schema+json" jsonpath "$.result.resources[29].size" == 3878 jsonpath "$.result.resources[29].annotations.priority" == 0 -jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response" -jsonpath "$.result.resources[30].name" == "Sourcemeta One Schema Dependencies API Response" -jsonpath "$.result.resources[30].description" == "The response format for the schema dependencies API endpoint" +jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/response" +jsonpath "$.result.resources[30].name" == "Sourcemeta One Playground Schema Trace API Response" +jsonpath "$.result.resources[30].description" == "The response format for tracing evaluation against a schema supplied in the request, which is what tracing against a schema in the catalog returns" jsonpath "$.result.resources[30].mimeType" == "application/schema+json" -jsonpath "$.result.resources[30].size" == 992 +jsonpath "$.result.resources[30].size" == 501 jsonpath "$.result.resources[30].annotations.priority" == 0 -jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/api/schemas/dependents/response" -jsonpath "$.result.resources[31].name" == "Sourcemeta One Schema Dependents API Response" -jsonpath "$.result.resources[31].description" == "The response format for the schema dependents API endpoint" +jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response" +jsonpath "$.result.resources[31].name" == "Sourcemeta One Schema Dependencies API Response" +jsonpath "$.result.resources[31].description" == "The response format for the schema dependencies API endpoint" jsonpath "$.result.resources[31].mimeType" == "application/schema+json" -jsonpath "$.result.resources[31].size" == 986 +jsonpath "$.result.resources[31].size" == 992 jsonpath "$.result.resources[31].annotations.priority" == 0 -jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/request" -jsonpath "$.result.resources[32].name" == "Sourcemeta One Schema Evaluate API Request" -jsonpath "$.result.resources[32].description" == "The JSON instance to validate against a schema in the catalog" +jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/api/schemas/dependents/response" +jsonpath "$.result.resources[32].name" == "Sourcemeta One Schema Dependents API Response" +jsonpath "$.result.resources[32].description" == "The response format for the schema dependents API endpoint" jsonpath "$.result.resources[32].mimeType" == "application/schema+json" -jsonpath "$.result.resources[32].size" == 417 +jsonpath "$.result.resources[32].size" == 986 jsonpath "$.result.resources[32].annotations.priority" == 0 -jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response" -jsonpath "$.result.resources[33].name" == "Sourcemeta One Schema Evaluate API Response" -jsonpath "$.result.resources[33].description" == "The response format for the schema evaluation API endpoint" +jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/request" +jsonpath "$.result.resources[33].name" == "Sourcemeta One Schema Evaluate API Request" +jsonpath "$.result.resources[33].description" == "The JSON instance to validate against a schema in the catalog" jsonpath "$.result.resources[33].mimeType" == "application/schema+json" -jsonpath "$.result.resources[33].size" == 2138 +jsonpath "$.result.resources[33].size" == 417 jsonpath "$.result.resources[33].annotations.priority" == 0 -jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/api/schemas/health/response" -jsonpath "$.result.resources[34].name" == "Sourcemeta One Schema Health API Response" -jsonpath "$.result.resources[34].description" == "The response format for the schema health API endpoint" +jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response" +jsonpath "$.result.resources[34].name" == "Sourcemeta One Schema Evaluate API Response" +jsonpath "$.result.resources[34].description" == "The response format for the schema evaluation API endpoint" jsonpath "$.result.resources[34].mimeType" == "application/schema+json" -jsonpath "$.result.resources[34].size" == 1584 +jsonpath "$.result.resources[34].size" == 2138 jsonpath "$.result.resources[34].annotations.priority" == 0 -jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/api/schemas/locations/response" -jsonpath "$.result.resources[35].name" == "Sourcemeta One Schema Locations API Response" -jsonpath "$.result.resources[35].description" == "The response format for the schema frame locations API endpoint" +jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/api/schemas/health/response" +jsonpath "$.result.resources[35].name" == "Sourcemeta One Schema Health API Response" +jsonpath "$.result.resources[35].description" == "The response format for the schema health API endpoint" jsonpath "$.result.resources[35].mimeType" == "application/schema+json" -jsonpath "$.result.resources[35].size" == 2391 +jsonpath "$.result.resources[35].size" == 1584 jsonpath "$.result.resources[35].annotations.priority" == 0 -jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/api/schemas/metadata/response" -jsonpath "$.result.resources[36].name" == "Sourcemeta One Schema Metadata API Response" -jsonpath "$.result.resources[36].description" == "The response format for the schema metadata API endpoint" +jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/api/schemas/locations/response" +jsonpath "$.result.resources[36].name" == "Sourcemeta One Schema Locations API Response" +jsonpath "$.result.resources[36].description" == "The response format for the schema frame locations API endpoint" jsonpath "$.result.resources[36].mimeType" == "application/schema+json" -jsonpath "$.result.resources[36].size" == 2943 +jsonpath "$.result.resources[36].size" == 2391 jsonpath "$.result.resources[36].annotations.priority" == 0 -jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/api/schemas/output-error" -jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Output Error" -jsonpath "$.result.resources[37].description" == "A single entry of the standard JSON Schema output format that describes why an instance does not conform to a schema" +jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/api/schemas/metadata/response" +jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Metadata API Response" +jsonpath "$.result.resources[37].description" == "The response format for the schema metadata API endpoint" jsonpath "$.result.resources[37].mimeType" == "application/schema+json" -jsonpath "$.result.resources[37].size" == 1143 +jsonpath "$.result.resources[37].size" == 2943 jsonpath "$.result.resources[37].annotations.priority" == 0 -jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/api/schemas/position" -jsonpath "$.result.resources[38].name" == "Sourcemeta One Schema Position" -jsonpath "$.result.resources[38].description" == "Represents a position in a JSON document as line start, column start, line end, and column end" +jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/api/schemas/output-error" +jsonpath "$.result.resources[38].name" == "Sourcemeta One Schema Output Error" +jsonpath "$.result.resources[38].description" == "A single entry of the standard JSON Schema output format that describes why an instance does not conform to a schema" jsonpath "$.result.resources[38].mimeType" == "application/schema+json" -jsonpath "$.result.resources[38].size" == 446 +jsonpath "$.result.resources[38].size" == 1143 jsonpath "$.result.resources[38].annotations.priority" == 0 -jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/api/schemas/positions/response" -jsonpath "$.result.resources[39].name" == "Sourcemeta One Schema Positions API Response" -jsonpath "$.result.resources[39].description" == "The response format for the schema positions API endpoint" +jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/api/schemas/position" +jsonpath "$.result.resources[39].name" == "Sourcemeta One Schema Position" +jsonpath "$.result.resources[39].description" == "Represents a position in a JSON document as line start, column start, line end, and column end" jsonpath "$.result.resources[39].mimeType" == "application/schema+json" -jsonpath "$.result.resources[39].size" == 435 +jsonpath "$.result.resources[39].size" == 446 jsonpath "$.result.resources[39].annotations.priority" == 0 -jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/request" -jsonpath "$.result.resources[40].name" == "Sourcemeta One Schema RDF API Request" -jsonpath "$.result.resources[40].description" == "The JSON instance to promote to JSON-LD against a schema in the catalog, along with the desired output form" +jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/api/schemas/positions/response" +jsonpath "$.result.resources[40].name" == "Sourcemeta One Schema Positions API Response" +jsonpath "$.result.resources[40].description" == "The response format for the schema positions API endpoint" jsonpath "$.result.resources[40].mimeType" == "application/schema+json" -jsonpath "$.result.resources[40].size" == 1422 +jsonpath "$.result.resources[40].size" == 435 jsonpath "$.result.resources[40].annotations.priority" == 0 -jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/response" -jsonpath "$.result.resources[41].name" == "Sourcemeta One Schema RDF API Response" -jsonpath "$.result.resources[41].description" == "The instance promoted to JSON-LD, in expanded, flattened, or compacted form" +jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/request" +jsonpath "$.result.resources[41].name" == "Sourcemeta One Schema RDF API Request" +jsonpath "$.result.resources[41].description" == "The JSON instance to promote to JSON-LD against a schema in the catalog, along with the desired output form" jsonpath "$.result.resources[41].mimeType" == "application/schema+json" -jsonpath "$.result.resources[41].size" == 799 +jsonpath "$.result.resources[41].size" == 1422 jsonpath "$.result.resources[41].annotations.priority" == 0 -jsonpath "$.result.resources[42].uri" == "{{base}}/self/v1/schemas/api/schemas/search/response" -jsonpath "$.result.resources[42].name" == "Sourcemeta One Schema Search API Response" -jsonpath "$.result.resources[42].description" == "The response format for the schema search API endpoint" +jsonpath "$.result.resources[42].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/response" +jsonpath "$.result.resources[42].name" == "Sourcemeta One Schema RDF API Response" +jsonpath "$.result.resources[42].description" == "The instance promoted to JSON-LD, in expanded, flattened, or compacted form" jsonpath "$.result.resources[42].mimeType" == "application/schema+json" -jsonpath "$.result.resources[42].size" == 1341 +jsonpath "$.result.resources[42].size" == 799 jsonpath "$.result.resources[42].annotations.priority" == 0 -jsonpath "$.result.resources[43].uri" == "{{base}}/self/v1/schemas/api/schemas/stats/response" -jsonpath "$.result.resources[43].name" == "Sourcemeta One Schema Stats API Response" -jsonpath "$.result.resources[43].description" == "The response format for the schema statistics API endpoint" +jsonpath "$.result.resources[43].uri" == "{{base}}/self/v1/schemas/api/schemas/search/response" +jsonpath "$.result.resources[43].name" == "Sourcemeta One Schema Search API Response" +jsonpath "$.result.resources[43].description" == "The response format for the schema search API endpoint" jsonpath "$.result.resources[43].mimeType" == "application/schema+json" -jsonpath "$.result.resources[43].size" == 2345 +jsonpath "$.result.resources[43].size" == 1341 jsonpath "$.result.resources[43].annotations.priority" == 0 -jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/request" -jsonpath "$.result.resources[44].name" == "Sourcemeta One Schema Trace API Request" -jsonpath "$.result.resources[44].description" == "The JSON instance to trace evaluation against a schema in the catalog" +jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/api/schemas/stats/response" +jsonpath "$.result.resources[44].name" == "Sourcemeta One Schema Stats API Response" +jsonpath "$.result.resources[44].description" == "The response format for the schema statistics API endpoint" jsonpath "$.result.resources[44].mimeType" == "application/schema+json" -jsonpath "$.result.resources[44].size" == 419 +jsonpath "$.result.resources[44].size" == 2345 jsonpath "$.result.resources[44].annotations.priority" == 0 -jsonpath "$.result.resources[45].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/response" -jsonpath "$.result.resources[45].name" == "Sourcemeta One Schema Trace API Response" -jsonpath "$.result.resources[45].description" == "The response format for the schema trace API endpoint" +jsonpath "$.result.resources[45].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/request" +jsonpath "$.result.resources[45].name" == "Sourcemeta One Schema Trace API Request" +jsonpath "$.result.resources[45].description" == "The JSON instance to trace evaluation against a schema in the catalog" jsonpath "$.result.resources[45].mimeType" == "application/schema+json" -jsonpath "$.result.resources[45].size" == 2118 +jsonpath "$.result.resources[45].size" == 419 jsonpath "$.result.resources[45].annotations.priority" == 0 -jsonpath "$.result.resources[46].uri" == "{{base}}/self/v1/schemas/mcp/error" -jsonpath "$.result.resources[46].name" == "Sourcemeta One MCP Error Response" -jsonpath "$.result.resources[46].description" == "The error response Sourcemeta One returns when an MCP request fails" +jsonpath "$.result.resources[46].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/response" +jsonpath "$.result.resources[46].name" == "Sourcemeta One Schema Trace API Response" +jsonpath "$.result.resources[46].description" == "The response format for the schema trace API endpoint" jsonpath "$.result.resources[46].mimeType" == "application/schema+json" -jsonpath "$.result.resources[46].size" == 5860 +jsonpath "$.result.resources[46].size" == 2290 jsonpath "$.result.resources[46].annotations.priority" == 0 -jsonpath "$.result.resources[47].uri" == "{{base}}/self/v1/schemas/mcp/initialize/request" -jsonpath "$.result.resources[47].name" == "Sourcemeta One MCP Initialize Request" -jsonpath "$.result.resources[47].description" == "Connection handshake from a client" +jsonpath "$.result.resources[47].uri" == "{{base}}/self/v1/schemas/mcp/error" +jsonpath "$.result.resources[47].name" == "Sourcemeta One MCP Error Response" +jsonpath "$.result.resources[47].description" == "The error response Sourcemeta One returns when an MCP request fails" jsonpath "$.result.resources[47].mimeType" == "application/schema+json" -jsonpath "$.result.resources[47].size" == 4617 +jsonpath "$.result.resources[47].size" == 5860 jsonpath "$.result.resources[47].annotations.priority" == 0 -jsonpath "$.result.resources[48].uri" == "{{base}}/self/v1/schemas/mcp/initialize/response" -jsonpath "$.result.resources[48].name" == "Sourcemeta One MCP Initialize Response" -jsonpath "$.result.resources[48].description" == "Sourcemeta One's response to a client's initialization" +jsonpath "$.result.resources[48].uri" == "{{base}}/self/v1/schemas/mcp/initialize/request" +jsonpath "$.result.resources[48].name" == "Sourcemeta One MCP Initialize Request" +jsonpath "$.result.resources[48].description" == "Connection handshake from a client" jsonpath "$.result.resources[48].mimeType" == "application/schema+json" -jsonpath "$.result.resources[48].size" == 2524 +jsonpath "$.result.resources[48].size" == 4617 jsonpath "$.result.resources[48].annotations.priority" == 0 -jsonpath "$.result.resources[49].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" -jsonpath "$.result.resources[49].name" == "Sourcemeta One MCP Cancelled Notification" -jsonpath "$.result.resources[49].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" +jsonpath "$.result.resources[49].uri" == "{{base}}/self/v1/schemas/mcp/initialize/response" +jsonpath "$.result.resources[49].name" == "Sourcemeta One MCP Initialize Response" +jsonpath "$.result.resources[49].description" == "Sourcemeta One's response to a client's initialization" jsonpath "$.result.resources[49].mimeType" == "application/schema+json" -jsonpath "$.result.resources[49].size" == 1163 +jsonpath "$.result.resources[49].size" == 2524 jsonpath "$.result.resources[49].annotations.priority" == 0 jsonpath "$.result.nextCursor" == "100" @@ -666,247 +666,259 @@ header "X-Frame-Options" not exists header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ jsonpath "$.jsonrpc" == "2.0" jsonpath "$.id" == 12 -jsonpath "$.result.resources" count == 40 -jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" -jsonpath "$.result.resources[0].name" == "Sourcemeta One MCP Initialized Notification" -jsonpath "$.result.resources[0].description" == "Client signal that the handshake is complete and normal operation may begin" +jsonpath "$.result.resources" count == 42 +jsonpath "$.result.resources[0].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" +jsonpath "$.result.resources[0].name" == "Sourcemeta One MCP Cancelled Notification" +jsonpath "$.result.resources[0].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" jsonpath "$.result.resources[0].mimeType" == "application/schema+json" -jsonpath "$.result.resources[0].size" == 740 +jsonpath "$.result.resources[0].size" == 1163 jsonpath "$.result.resources[0].annotations.priority" == 0 -jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" -jsonpath "$.result.resources[1].name" == "Sourcemeta One MCP Ping Request" -jsonpath "$.result.resources[1].description" == "Liveness check from a client" +jsonpath "$.result.resources[1].uri" == "{{base}}/self/v1/schemas/mcp/notifications/initialized" +jsonpath "$.result.resources[1].name" == "Sourcemeta One MCP Initialized Notification" +jsonpath "$.result.resources[1].description" == "Client signal that the handshake is complete and normal operation may begin" jsonpath "$.result.resources[1].mimeType" == "application/schema+json" -jsonpath "$.result.resources[1].size" == 695 +jsonpath "$.result.resources[1].size" == 740 jsonpath "$.result.resources[1].annotations.priority" == 0 -jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" -jsonpath "$.result.resources[2].name" == "Sourcemeta One MCP Ping Response" -jsonpath "$.result.resources[2].description" == "Sourcemeta One's response to a liveness check" +jsonpath "$.result.resources[2].uri" == "{{base}}/self/v1/schemas/mcp/ping/request" +jsonpath "$.result.resources[2].name" == "Sourcemeta One MCP Ping Request" +jsonpath "$.result.resources[2].description" == "Liveness check from a client" jsonpath "$.result.resources[2].mimeType" == "application/schema+json" -jsonpath "$.result.resources[2].size" == 598 +jsonpath "$.result.resources[2].size" == 695 jsonpath "$.result.resources[2].annotations.priority" == 0 -jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" -jsonpath "$.result.resources[3].name" == "Sourcemeta One MCP Protected Resource Metadata Response" -jsonpath "$.result.resources[3].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" +jsonpath "$.result.resources[3].uri" == "{{base}}/self/v1/schemas/mcp/ping/response" +jsonpath "$.result.resources[3].name" == "Sourcemeta One MCP Ping Response" +jsonpath "$.result.resources[3].description" == "Sourcemeta One's response to a liveness check" jsonpath "$.result.resources[3].mimeType" == "application/schema+json" -jsonpath "$.result.resources[3].size" == 2176 +jsonpath "$.result.resources[3].size" == 598 jsonpath "$.result.resources[3].annotations.priority" == 0 -jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/request" -jsonpath "$.result.resources[4].name" == "Sourcemeta One MCP Request" -jsonpath "$.result.resources[4].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" +jsonpath "$.result.resources[4].uri" == "{{base}}/self/v1/schemas/mcp/prm/response" +jsonpath "$.result.resources[4].name" == "Sourcemeta One MCP Protected Resource Metadata Response" +jsonpath "$.result.resources[4].description" == "The OAuth 2.0 Protected Resource Metadata describing where a token for this instance's Model Context Protocol endpoint is obtained, as defined by RFC 9728" jsonpath "$.result.resources[4].mimeType" == "application/schema+json" -jsonpath "$.result.resources[4].size" == 2520 +jsonpath "$.result.resources[4].size" == 2176 jsonpath "$.result.resources[4].annotations.priority" == 0 -jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" -jsonpath "$.result.resources[5].name" == "Sourcemeta One MCP Resources List Request" -jsonpath "$.result.resources[5].description" == "Request from a client to list MCP resources" +jsonpath "$.result.resources[5].uri" == "{{base}}/self/v1/schemas/mcp/request" +jsonpath "$.result.resources[5].name" == "Sourcemeta One MCP Request" +jsonpath "$.result.resources[5].description" == "Any incoming MCP request the server accepts. The body may be a single JSON-RPC envelope or a JSON-RPC 2.0 batch (an array of envelopes) on protocol version `2025-03-26`" jsonpath "$.result.resources[5].mimeType" == "application/schema+json" -jsonpath "$.result.resources[5].size" == 1071 +jsonpath "$.result.resources[5].size" == 2520 jsonpath "$.result.resources[5].annotations.priority" == 0 -jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" -jsonpath "$.result.resources[6].name" == "Sourcemeta One MCP Resources List Response" -jsonpath "$.result.resources[6].description" == "Sourcemeta One's list of MCP resources" +jsonpath "$.result.resources[6].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/request" +jsonpath "$.result.resources[6].name" == "Sourcemeta One MCP Resources List Request" +jsonpath "$.result.resources[6].description" == "Request from a client to list MCP resources" jsonpath "$.result.resources[6].mimeType" == "application/schema+json" -jsonpath "$.result.resources[6].size" == 3062 +jsonpath "$.result.resources[6].size" == 1071 jsonpath "$.result.resources[6].annotations.priority" == 0 -jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" -jsonpath "$.result.resources[7].name" == "Sourcemeta One MCP Resources Read Request" -jsonpath "$.result.resources[7].description" == "Request from a client to read an MCP resource" +jsonpath "$.result.resources[7].uri" == "{{base}}/self/v1/schemas/mcp/resources/list/response" +jsonpath "$.result.resources[7].name" == "Sourcemeta One MCP Resources List Response" +jsonpath "$.result.resources[7].description" == "Sourcemeta One's list of MCP resources" jsonpath "$.result.resources[7].mimeType" == "application/schema+json" -jsonpath "$.result.resources[7].size" == 1293 +jsonpath "$.result.resources[7].size" == 3062 jsonpath "$.result.resources[7].annotations.priority" == 0 -jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" -jsonpath "$.result.resources[8].name" == "Sourcemeta One MCP Resources Read Response" -jsonpath "$.result.resources[8].description" == "Sourcemeta One's response containing an MCP resource" +jsonpath "$.result.resources[8].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/request" +jsonpath "$.result.resources[8].name" == "Sourcemeta One MCP Resources Read Request" +jsonpath "$.result.resources[8].description" == "Request from a client to read an MCP resource" jsonpath "$.result.resources[8].mimeType" == "application/schema+json" -jsonpath "$.result.resources[8].size" == 1754 +jsonpath "$.result.resources[8].size" == 1293 jsonpath "$.result.resources[8].annotations.priority" == 0 -jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" -jsonpath "$.result.resources[9].name" == "Sourcemeta One MCP Resources Templates List Request" -jsonpath "$.result.resources[9].description" == "Request from a client to list MCP resource templates" +jsonpath "$.result.resources[9].uri" == "{{base}}/self/v1/schemas/mcp/resources/read/response" +jsonpath "$.result.resources[9].name" == "Sourcemeta One MCP Resources Read Response" +jsonpath "$.result.resources[9].description" == "Sourcemeta One's response containing an MCP resource" jsonpath "$.result.resources[9].mimeType" == "application/schema+json" -jsonpath "$.result.resources[9].size" == 922 +jsonpath "$.result.resources[9].size" == 1754 jsonpath "$.result.resources[9].annotations.priority" == 0 -jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" -jsonpath "$.result.resources[10].name" == "Sourcemeta One MCP Resources Templates List Response" -jsonpath "$.result.resources[10].description" == "Sourcemeta One's list of MCP resource templates" +jsonpath "$.result.resources[10].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/request" +jsonpath "$.result.resources[10].name" == "Sourcemeta One MCP Resources Templates List Request" +jsonpath "$.result.resources[10].description" == "Request from a client to list MCP resource templates" jsonpath "$.result.resources[10].mimeType" == "application/schema+json" -jsonpath "$.result.resources[10].size" == 2927 +jsonpath "$.result.resources[10].size" == 922 jsonpath "$.result.resources[10].annotations.priority" == 0 -jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/response" -jsonpath "$.result.resources[11].name" == "Sourcemeta One MCP Response" -jsonpath "$.result.resources[11].description" == "Any outgoing MCP response the server returns" +jsonpath "$.result.resources[11].uri" == "{{base}}/self/v1/schemas/mcp/resources/templates/list/response" +jsonpath "$.result.resources[11].name" == "Sourcemeta One MCP Resources Templates List Response" +jsonpath "$.result.resources[11].description" == "Sourcemeta One's list of MCP resource templates" jsonpath "$.result.resources[11].mimeType" == "application/schema+json" -jsonpath "$.result.resources[11].size" == 4799 +jsonpath "$.result.resources[11].size" == 2927 jsonpath "$.result.resources[11].annotations.priority" == 0 -jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" -jsonpath "$.result.resources[12].name" == "Sourcemeta One Schema Evaluate RPC Input" -jsonpath "$.result.resources[12].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" +jsonpath "$.result.resources[12].uri" == "{{base}}/self/v1/schemas/mcp/response" +jsonpath "$.result.resources[12].name" == "Sourcemeta One MCP Response" +jsonpath "$.result.resources[12].description" == "Any outgoing MCP response the server returns" jsonpath "$.result.resources[12].mimeType" == "application/schema+json" -jsonpath "$.result.resources[12].size" == 1566 +jsonpath "$.result.resources[12].size" == 4799 jsonpath "$.result.resources[12].annotations.priority" == 0 -jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" -jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[13].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/request" +jsonpath "$.result.resources[13].name" == "Sourcemeta One Schema Evaluate RPC Input" jsonpath "$.result.resources[13].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[13].mimeType" == "application/schema+json" -jsonpath "$.result.resources[13].size" == 441 +jsonpath "$.result.resources[13].size" == 1566 jsonpath "$.result.resources[13].annotations.priority" == 0 -jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" -jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Dependencies RPC Input" -jsonpath "$.result.resources[14].description" == "Get all direct and indirect dependencies of a schema in the catalog" +jsonpath "$.result.resources[14].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/evaluate-schema/response" +jsonpath "$.result.resources[14].name" == "Sourcemeta One Schema Evaluate RPC Output" +jsonpath "$.result.resources[14].description" == "Evaluate a JSON instance against a schema in the catalog and return whether it is valid plus any errors" jsonpath "$.result.resources[14].mimeType" == "application/schema+json" -jsonpath "$.result.resources[14].size" == 687 +jsonpath "$.result.resources[14].size" == 441 jsonpath "$.result.resources[14].annotations.priority" == 0 -jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" -jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[15].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request" +jsonpath "$.result.resources[15].name" == "Sourcemeta One Schema Dependencies RPC Input" jsonpath "$.result.resources[15].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[15].mimeType" == "application/schema+json" -jsonpath "$.result.resources[15].size" == 741 +jsonpath "$.result.resources[15].size" == 687 jsonpath "$.result.resources[15].annotations.priority" == 0 -jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" -jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema Dependents RPC Input" -jsonpath "$.result.resources[16].description" == "Get all direct and transitive dependents of a schema in the catalog" +jsonpath "$.result.resources[16].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response" +jsonpath "$.result.resources[16].name" == "Sourcemeta One Schema Dependencies RPC Output" +jsonpath "$.result.resources[16].description" == "Get all direct and indirect dependencies of a schema in the catalog" jsonpath "$.result.resources[16].mimeType" == "application/schema+json" -jsonpath "$.result.resources[16].size" == 683 +jsonpath "$.result.resources[16].size" == 741 jsonpath "$.result.resources[16].annotations.priority" == 0 -jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" -jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[17].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/request" +jsonpath "$.result.resources[17].name" == "Sourcemeta One Schema Dependents RPC Input" jsonpath "$.result.resources[17].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[17].mimeType" == "application/schema+json" -jsonpath "$.result.resources[17].size" == 735 +jsonpath "$.result.resources[17].size" == 683 jsonpath "$.result.resources[17].annotations.priority" == 0 -jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" -jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema Health RPC Input" -jsonpath "$.result.resources[18].description" == "Get the health analysis and score of a schema in the catalog" +jsonpath "$.result.resources[18].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-dependents/response" +jsonpath "$.result.resources[18].name" == "Sourcemeta One Schema Dependents RPC Output" +jsonpath "$.result.resources[18].description" == "Get all direct and transitive dependents of a schema in the catalog" jsonpath "$.result.resources[18].mimeType" == "application/schema+json" -jsonpath "$.result.resources[18].size" == 668 +jsonpath "$.result.resources[18].size" == 735 jsonpath "$.result.resources[18].annotations.priority" == 0 -jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" -jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[19].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/request" +jsonpath "$.result.resources[19].name" == "Sourcemeta One Schema Health RPC Input" jsonpath "$.result.resources[19].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[19].mimeType" == "application/schema+json" -jsonpath "$.result.resources[19].size" == 415 +jsonpath "$.result.resources[19].size" == 668 jsonpath "$.result.resources[19].annotations.priority" == 0 -jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" -jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Locations RPC Input" -jsonpath "$.result.resources[20].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" +jsonpath "$.result.resources[20].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-health/response" +jsonpath "$.result.resources[20].name" == "Sourcemeta One Schema Health RPC Output" +jsonpath "$.result.resources[20].description" == "Get the health analysis and score of a schema in the catalog" jsonpath "$.result.resources[20].mimeType" == "application/schema+json" -jsonpath "$.result.resources[20].size" == 720 +jsonpath "$.result.resources[20].size" == 415 jsonpath "$.result.resources[20].annotations.priority" == 0 -jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" -jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[21].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/request" +jsonpath "$.result.resources[21].name" == "Sourcemeta One Schema Locations RPC Input" jsonpath "$.result.resources[21].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[21].mimeType" == "application/schema+json" -jsonpath "$.result.resources[21].size" == 471 +jsonpath "$.result.resources[21].size" == 720 jsonpath "$.result.resources[21].annotations.priority" == 0 -jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" -jsonpath "$.result.resources[22].name" == "Sourcemeta One Schema Metadata RPC Input" -jsonpath "$.result.resources[22].description" == "Get metadata information about a schema in the catalog" +jsonpath "$.result.resources[22].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-locations/response" +jsonpath "$.result.resources[22].name" == "Sourcemeta One Schema Locations RPC Output" +jsonpath "$.result.resources[22].description" == "Get metadata about every URI associated with a schema, including schema resources, subschemas, and anchors" jsonpath "$.result.resources[22].mimeType" == "application/schema+json" -jsonpath "$.result.resources[22].size" == 666 +jsonpath "$.result.resources[22].size" == 471 jsonpath "$.result.resources[22].annotations.priority" == 0 -jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" -jsonpath "$.result.resources[23].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[23].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/request" +jsonpath "$.result.resources[23].name" == "Sourcemeta One Schema Metadata RPC Input" jsonpath "$.result.resources[23].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[23].mimeType" == "application/schema+json" -jsonpath "$.result.resources[23].size" == 843 +jsonpath "$.result.resources[23].size" == 666 jsonpath "$.result.resources[23].annotations.priority" == 0 -jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" -jsonpath "$.result.resources[24].name" == "Sourcemeta One Schema Positions RPC Input" -jsonpath "$.result.resources[24].description" == "Get line and column position information for every token in a schema" +jsonpath "$.result.resources[24].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-metadata/response" +jsonpath "$.result.resources[24].name" == "Sourcemeta One Schema Metadata RPC Output" +jsonpath "$.result.resources[24].description" == "Get metadata information about a schema in the catalog" jsonpath "$.result.resources[24].mimeType" == "application/schema+json" -jsonpath "$.result.resources[24].size" == 682 +jsonpath "$.result.resources[24].size" == 843 jsonpath "$.result.resources[24].annotations.priority" == 0 -jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" -jsonpath "$.result.resources[25].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[25].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/request" +jsonpath "$.result.resources[25].name" == "Sourcemeta One Schema Positions RPC Input" jsonpath "$.result.resources[25].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[25].mimeType" == "application/schema+json" -jsonpath "$.result.resources[25].size" == 435 +jsonpath "$.result.resources[25].size" == 682 jsonpath "$.result.resources[25].annotations.priority" == 0 -jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" -jsonpath "$.result.resources[26].name" == "Sourcemeta One Schema Statistics RPC Input" -jsonpath "$.result.resources[26].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" +jsonpath "$.result.resources[26].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-positions/response" +jsonpath "$.result.resources[26].name" == "Sourcemeta One Schema Positions RPC Output" +jsonpath "$.result.resources[26].description" == "Get line and column position information for every token in a schema" jsonpath "$.result.resources[26].mimeType" == "application/schema+json" -jsonpath "$.result.resources[26].size" == 703 +jsonpath "$.result.resources[26].size" == 435 jsonpath "$.result.resources[26].annotations.priority" == 0 -jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" -jsonpath "$.result.resources[27].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[27].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/request" +jsonpath "$.result.resources[27].name" == "Sourcemeta One Schema Statistics RPC Input" jsonpath "$.result.resources[27].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[27].mimeType" == "application/schema+json" -jsonpath "$.result.resources[27].size" == 709 +jsonpath "$.result.resources[27].size" == 703 jsonpath "$.result.resources[27].annotations.priority" == 0 -jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" -jsonpath "$.result.resources[28].name" == "Sourcemeta One Schema RDF RPC Input" -jsonpath "$.result.resources[28].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" +jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/get-schema-stats/response" +jsonpath "$.result.resources[28].name" == "Sourcemeta One Schema Statistics RPC Output" +jsonpath "$.result.resources[28].description" == "Get keyword statistics by vocabulary about every URI associated with a schema in the catalog" jsonpath "$.result.resources[28].mimeType" == "application/schema+json" -jsonpath "$.result.resources[28].size" == 2558 +jsonpath "$.result.resources[28].size" == 709 jsonpath "$.result.resources[28].annotations.priority" == 0 -jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" -jsonpath "$.result.resources[29].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/request" +jsonpath "$.result.resources[29].name" == "Sourcemeta One Schema RDF RPC Input" jsonpath "$.result.resources[29].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[29].mimeType" == "application/schema+json" -jsonpath "$.result.resources[29].size" == 1589 +jsonpath "$.result.resources[29].size" == 2558 jsonpath "$.result.resources[29].annotations.priority" == 0 -jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" -jsonpath "$.result.resources[30].name" == "Sourcemeta One Directory Listing RPC Input" -jsonpath "$.result.resources[30].description" == "List the contents of a directory in the catalog" +jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/instance-to-rdf/response" +jsonpath "$.result.resources[30].name" == "Sourcemeta One Schema RDF RPC Output" +jsonpath "$.result.resources[30].description" == "Validate a JSON instance against a schema in the catalog and promote it to JSON-LD using the x-jsonld-* annotations of the schema" jsonpath "$.result.resources[30].mimeType" == "application/schema+json" -jsonpath "$.result.resources[30].size" == 549 +jsonpath "$.result.resources[30].size" == 1589 jsonpath "$.result.resources[30].annotations.priority" == 0 -jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" -jsonpath "$.result.resources[31].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/request" +jsonpath "$.result.resources[31].name" == "Sourcemeta One Directory Listing RPC Input" jsonpath "$.result.resources[31].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[31].mimeType" == "application/schema+json" -jsonpath "$.result.resources[31].size" == 609 +jsonpath "$.result.resources[31].size" == 549 jsonpath "$.result.resources[31].annotations.priority" == 0 -jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" -jsonpath "$.result.resources[32].name" == "Sourcemeta One MCP Tools Call Request" -jsonpath "$.result.resources[32].description" == "Request from a client to invoke an MCP tool by name" +jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/list-directory/response" +jsonpath "$.result.resources[32].name" == "Sourcemeta One Directory Listing RPC Output" +jsonpath "$.result.resources[32].description" == "List the contents of a directory in the catalog" jsonpath "$.result.resources[32].mimeType" == "application/schema+json" -jsonpath "$.result.resources[32].size" == 1161 +jsonpath "$.result.resources[32].size" == 609 jsonpath "$.result.resources[32].annotations.priority" == 0 -jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" -jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Tools Call Response" -jsonpath "$.result.resources[33].description" == "Sourcemeta One's response to a tool invocation" +jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request" +jsonpath "$.result.resources[33].name" == "Sourcemeta One MCP Tools Call Request" +jsonpath "$.result.resources[33].description" == "Request from a client to invoke an MCP tool by name" jsonpath "$.result.resources[33].mimeType" == "application/schema+json" -jsonpath "$.result.resources[33].size" == 4668 +jsonpath "$.result.resources[33].size" == 1161 jsonpath "$.result.resources[33].annotations.priority" == 0 -jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" -jsonpath "$.result.resources[34].name" == "Sourcemeta One Schema Search RPC Input" -jsonpath "$.result.resources[34].description" == "Search for schemas in the catalog by query term" +jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/response" +jsonpath "$.result.resources[34].name" == "Sourcemeta One MCP Tools Call Response" +jsonpath "$.result.resources[34].description" == "Sourcemeta One's response to a tool invocation" jsonpath "$.result.resources[34].mimeType" == "application/schema+json" -jsonpath "$.result.resources[34].size" == 2155 +jsonpath "$.result.resources[34].size" == 4668 jsonpath "$.result.resources[34].annotations.priority" == 0 -jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" -jsonpath "$.result.resources[35].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/request" +jsonpath "$.result.resources[35].name" == "Sourcemeta One Schema Search RPC Input" jsonpath "$.result.resources[35].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[35].mimeType" == "application/schema+json" -jsonpath "$.result.resources[35].size" == 777 +jsonpath "$.result.resources[35].size" == 2155 jsonpath "$.result.resources[35].annotations.priority" == 0 -jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" -jsonpath "$.result.resources[36].name" == "Sourcemeta One Schema Trace RPC Input" -jsonpath "$.result.resources[36].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" +jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/search-schemas/response" +jsonpath "$.result.resources[36].name" == "Sourcemeta One Schema Search RPC Output" +jsonpath "$.result.resources[36].description" == "Search for schemas in the catalog by query term" jsonpath "$.result.resources[36].mimeType" == "application/schema+json" -jsonpath "$.result.resources[36].size" == 1735 +jsonpath "$.result.resources[36].size" == 777 jsonpath "$.result.resources[36].annotations.priority" == 0 -jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" -jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request" +jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Trace RPC Input" jsonpath "$.result.resources[37].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[37].mimeType" == "application/schema+json" -jsonpath "$.result.resources[37].size" == 497 +jsonpath "$.result.resources[37].size" == 1735 jsonpath "$.result.resources[37].annotations.priority" == 0 -jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" -jsonpath "$.result.resources[38].name" == "Sourcemeta One MCP Tools List Request" -jsonpath "$.result.resources[38].description" == "Request from a client to list MCP tools" +jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response" +jsonpath "$.result.resources[38].name" == "Sourcemeta One Schema Trace RPC Output" +jsonpath "$.result.resources[38].description" == "Trace step-by-step evaluation of a JSON instance against a schema in the catalog, exposing each step, rule application, and decision point" jsonpath "$.result.resources[38].mimeType" == "application/schema+json" -jsonpath "$.result.resources[38].size" == 853 +jsonpath "$.result.resources[38].size" == 497 jsonpath "$.result.resources[38].annotations.priority" == 0 -jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/response" -jsonpath "$.result.resources[39].name" == "Sourcemeta One MCP Tools List Response" -jsonpath "$.result.resources[39].description" == "Sourcemeta One's list of MCP tools" +jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/request" +jsonpath "$.result.resources[39].name" == "Sourcemeta One MCP Tools List Request" +jsonpath "$.result.resources[39].description" == "Request from a client to list MCP tools" jsonpath "$.result.resources[39].mimeType" == "application/schema+json" -jsonpath "$.result.resources[39].size" == 4495 -jsonpath "$.result.resources[39].annotations.priority" == 0.0 +jsonpath "$.result.resources[39].size" == 853 +jsonpath "$.result.resources[39].annotations.priority" == 0 +jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/mcp/tools/list/response" +jsonpath "$.result.resources[40].name" == "Sourcemeta One MCP Tools List Response" +jsonpath "$.result.resources[40].description" == "Sourcemeta One's list of MCP tools" +jsonpath "$.result.resources[40].mimeType" == "application/schema+json" +jsonpath "$.result.resources[40].size" == 4495 +jsonpath "$.result.resources[40].annotations.priority" == 0 +jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/request" +jsonpath "$.result.resources[41].name" == "Sourcemeta One Playground Schema Trace API Request" +jsonpath "$.result.resources[41].description" == "A JSON instance and the schema to trace its evaluation against" +jsonpath "$.result.resources[41].mimeType" == "application/schema+json" +jsonpath "$.result.resources[41].size" == 1124 +jsonpath "$.result.resources[41].annotations.priority" == 0 jsonpath "$.result.nextCursor" not exists POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} @@ -1257,7 +1269,7 @@ jsonpath "$.result.resources[28].uri" == "{{base}}/self/v1/schemas/api/error" jsonpath "$.result.resources[28].name" == "Sourcemeta One API Error" jsonpath "$.result.resources[28].description" == "The error response format returned by the Sourcemeta One API endpoints" jsonpath "$.result.resources[28].mimeType" == "application/schema+json" -jsonpath "$.result.resources[28].size" == 9525 +jsonpath "$.result.resources[28].size" == 11208 jsonpath "$.result.resources[28].annotations.priority" == 0 jsonpath "$.result.resources[29].uri" == "{{base}}/self/v1/schemas/api/list/response" jsonpath "$.result.resources[29].name" == "Sourcemeta One List API Response" @@ -1265,125 +1277,125 @@ jsonpath "$.result.resources[29].description" == "The response format for the di jsonpath "$.result.resources[29].mimeType" == "application/schema+json" jsonpath "$.result.resources[29].size" == 3878 jsonpath "$.result.resources[29].annotations.priority" == 0 -jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response" -jsonpath "$.result.resources[30].name" == "Sourcemeta One Schema Dependencies API Response" -jsonpath "$.result.resources[30].description" == "The response format for the schema dependencies API endpoint" +jsonpath "$.result.resources[30].uri" == "{{base}}/self/v1/schemas/api/playground/schemas/trace/response" +jsonpath "$.result.resources[30].name" == "Sourcemeta One Playground Schema Trace API Response" +jsonpath "$.result.resources[30].description" == "The response format for tracing evaluation against a schema supplied in the request, which is what tracing against a schema in the catalog returns" jsonpath "$.result.resources[30].mimeType" == "application/schema+json" -jsonpath "$.result.resources[30].size" == 992 +jsonpath "$.result.resources[30].size" == 501 jsonpath "$.result.resources[30].annotations.priority" == 0 -jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/api/schemas/dependents/response" -jsonpath "$.result.resources[31].name" == "Sourcemeta One Schema Dependents API Response" -jsonpath "$.result.resources[31].description" == "The response format for the schema dependents API endpoint" +jsonpath "$.result.resources[31].uri" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response" +jsonpath "$.result.resources[31].name" == "Sourcemeta One Schema Dependencies API Response" +jsonpath "$.result.resources[31].description" == "The response format for the schema dependencies API endpoint" jsonpath "$.result.resources[31].mimeType" == "application/schema+json" -jsonpath "$.result.resources[31].size" == 986 +jsonpath "$.result.resources[31].size" == 992 jsonpath "$.result.resources[31].annotations.priority" == 0 -jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/request" -jsonpath "$.result.resources[32].name" == "Sourcemeta One Schema Evaluate API Request" -jsonpath "$.result.resources[32].description" == "The JSON instance to validate against a schema in the catalog" +jsonpath "$.result.resources[32].uri" == "{{base}}/self/v1/schemas/api/schemas/dependents/response" +jsonpath "$.result.resources[32].name" == "Sourcemeta One Schema Dependents API Response" +jsonpath "$.result.resources[32].description" == "The response format for the schema dependents API endpoint" jsonpath "$.result.resources[32].mimeType" == "application/schema+json" -jsonpath "$.result.resources[32].size" == 417 +jsonpath "$.result.resources[32].size" == 986 jsonpath "$.result.resources[32].annotations.priority" == 0 -jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response" -jsonpath "$.result.resources[33].name" == "Sourcemeta One Schema Evaluate API Response" -jsonpath "$.result.resources[33].description" == "The response format for the schema evaluation API endpoint" +jsonpath "$.result.resources[33].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/request" +jsonpath "$.result.resources[33].name" == "Sourcemeta One Schema Evaluate API Request" +jsonpath "$.result.resources[33].description" == "The JSON instance to validate against a schema in the catalog" jsonpath "$.result.resources[33].mimeType" == "application/schema+json" -jsonpath "$.result.resources[33].size" == 2138 +jsonpath "$.result.resources[33].size" == 417 jsonpath "$.result.resources[33].annotations.priority" == 0 -jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/api/schemas/health/response" -jsonpath "$.result.resources[34].name" == "Sourcemeta One Schema Health API Response" -jsonpath "$.result.resources[34].description" == "The response format for the schema health API endpoint" +jsonpath "$.result.resources[34].uri" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response" +jsonpath "$.result.resources[34].name" == "Sourcemeta One Schema Evaluate API Response" +jsonpath "$.result.resources[34].description" == "The response format for the schema evaluation API endpoint" jsonpath "$.result.resources[34].mimeType" == "application/schema+json" -jsonpath "$.result.resources[34].size" == 1584 +jsonpath "$.result.resources[34].size" == 2138 jsonpath "$.result.resources[34].annotations.priority" == 0 -jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/api/schemas/locations/response" -jsonpath "$.result.resources[35].name" == "Sourcemeta One Schema Locations API Response" -jsonpath "$.result.resources[35].description" == "The response format for the schema frame locations API endpoint" +jsonpath "$.result.resources[35].uri" == "{{base}}/self/v1/schemas/api/schemas/health/response" +jsonpath "$.result.resources[35].name" == "Sourcemeta One Schema Health API Response" +jsonpath "$.result.resources[35].description" == "The response format for the schema health API endpoint" jsonpath "$.result.resources[35].mimeType" == "application/schema+json" -jsonpath "$.result.resources[35].size" == 2391 +jsonpath "$.result.resources[35].size" == 1584 jsonpath "$.result.resources[35].annotations.priority" == 0 -jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/api/schemas/metadata/response" -jsonpath "$.result.resources[36].name" == "Sourcemeta One Schema Metadata API Response" -jsonpath "$.result.resources[36].description" == "The response format for the schema metadata API endpoint" +jsonpath "$.result.resources[36].uri" == "{{base}}/self/v1/schemas/api/schemas/locations/response" +jsonpath "$.result.resources[36].name" == "Sourcemeta One Schema Locations API Response" +jsonpath "$.result.resources[36].description" == "The response format for the schema frame locations API endpoint" jsonpath "$.result.resources[36].mimeType" == "application/schema+json" -jsonpath "$.result.resources[36].size" == 2943 +jsonpath "$.result.resources[36].size" == 2391 jsonpath "$.result.resources[36].annotations.priority" == 0 -jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/api/schemas/output-error" -jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Output Error" -jsonpath "$.result.resources[37].description" == "A single entry of the standard JSON Schema output format that describes why an instance does not conform to a schema" +jsonpath "$.result.resources[37].uri" == "{{base}}/self/v1/schemas/api/schemas/metadata/response" +jsonpath "$.result.resources[37].name" == "Sourcemeta One Schema Metadata API Response" +jsonpath "$.result.resources[37].description" == "The response format for the schema metadata API endpoint" jsonpath "$.result.resources[37].mimeType" == "application/schema+json" -jsonpath "$.result.resources[37].size" == 1143 +jsonpath "$.result.resources[37].size" == 2943 jsonpath "$.result.resources[37].annotations.priority" == 0 -jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/api/schemas/position" -jsonpath "$.result.resources[38].name" == "Sourcemeta One Schema Position" -jsonpath "$.result.resources[38].description" == "Represents a position in a JSON document as line start, column start, line end, and column end" +jsonpath "$.result.resources[38].uri" == "{{base}}/self/v1/schemas/api/schemas/output-error" +jsonpath "$.result.resources[38].name" == "Sourcemeta One Schema Output Error" +jsonpath "$.result.resources[38].description" == "A single entry of the standard JSON Schema output format that describes why an instance does not conform to a schema" jsonpath "$.result.resources[38].mimeType" == "application/schema+json" -jsonpath "$.result.resources[38].size" == 446 +jsonpath "$.result.resources[38].size" == 1143 jsonpath "$.result.resources[38].annotations.priority" == 0 -jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/api/schemas/positions/response" -jsonpath "$.result.resources[39].name" == "Sourcemeta One Schema Positions API Response" -jsonpath "$.result.resources[39].description" == "The response format for the schema positions API endpoint" +jsonpath "$.result.resources[39].uri" == "{{base}}/self/v1/schemas/api/schemas/position" +jsonpath "$.result.resources[39].name" == "Sourcemeta One Schema Position" +jsonpath "$.result.resources[39].description" == "Represents a position in a JSON document as line start, column start, line end, and column end" jsonpath "$.result.resources[39].mimeType" == "application/schema+json" -jsonpath "$.result.resources[39].size" == 435 +jsonpath "$.result.resources[39].size" == 446 jsonpath "$.result.resources[39].annotations.priority" == 0 -jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/request" -jsonpath "$.result.resources[40].name" == "Sourcemeta One Schema RDF API Request" -jsonpath "$.result.resources[40].description" == "The JSON instance to promote to JSON-LD against a schema in the catalog, along with the desired output form" +jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/api/schemas/positions/response" +jsonpath "$.result.resources[40].name" == "Sourcemeta One Schema Positions API Response" +jsonpath "$.result.resources[40].description" == "The response format for the schema positions API endpoint" jsonpath "$.result.resources[40].mimeType" == "application/schema+json" -jsonpath "$.result.resources[40].size" == 1422 +jsonpath "$.result.resources[40].size" == 435 jsonpath "$.result.resources[40].annotations.priority" == 0 -jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/response" -jsonpath "$.result.resources[41].name" == "Sourcemeta One Schema RDF API Response" -jsonpath "$.result.resources[41].description" == "The instance promoted to JSON-LD, in expanded, flattened, or compacted form" +jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/request" +jsonpath "$.result.resources[41].name" == "Sourcemeta One Schema RDF API Request" +jsonpath "$.result.resources[41].description" == "The JSON instance to promote to JSON-LD against a schema in the catalog, along with the desired output form" jsonpath "$.result.resources[41].mimeType" == "application/schema+json" -jsonpath "$.result.resources[41].size" == 799 +jsonpath "$.result.resources[41].size" == 1422 jsonpath "$.result.resources[41].annotations.priority" == 0 -jsonpath "$.result.resources[42].uri" == "{{base}}/self/v1/schemas/api/schemas/search/response" -jsonpath "$.result.resources[42].name" == "Sourcemeta One Schema Search API Response" -jsonpath "$.result.resources[42].description" == "The response format for the schema search API endpoint" +jsonpath "$.result.resources[42].uri" == "{{base}}/self/v1/schemas/api/schemas/rdf/response" +jsonpath "$.result.resources[42].name" == "Sourcemeta One Schema RDF API Response" +jsonpath "$.result.resources[42].description" == "The instance promoted to JSON-LD, in expanded, flattened, or compacted form" jsonpath "$.result.resources[42].mimeType" == "application/schema+json" -jsonpath "$.result.resources[42].size" == 1341 +jsonpath "$.result.resources[42].size" == 799 jsonpath "$.result.resources[42].annotations.priority" == 0 -jsonpath "$.result.resources[43].uri" == "{{base}}/self/v1/schemas/api/schemas/stats/response" -jsonpath "$.result.resources[43].name" == "Sourcemeta One Schema Stats API Response" -jsonpath "$.result.resources[43].description" == "The response format for the schema statistics API endpoint" +jsonpath "$.result.resources[43].uri" == "{{base}}/self/v1/schemas/api/schemas/search/response" +jsonpath "$.result.resources[43].name" == "Sourcemeta One Schema Search API Response" +jsonpath "$.result.resources[43].description" == "The response format for the schema search API endpoint" jsonpath "$.result.resources[43].mimeType" == "application/schema+json" -jsonpath "$.result.resources[43].size" == 2345 +jsonpath "$.result.resources[43].size" == 1341 jsonpath "$.result.resources[43].annotations.priority" == 0 -jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/request" -jsonpath "$.result.resources[44].name" == "Sourcemeta One Schema Trace API Request" -jsonpath "$.result.resources[44].description" == "The JSON instance to trace evaluation against a schema in the catalog" +jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/api/schemas/stats/response" +jsonpath "$.result.resources[44].name" == "Sourcemeta One Schema Stats API Response" +jsonpath "$.result.resources[44].description" == "The response format for the schema statistics API endpoint" jsonpath "$.result.resources[44].mimeType" == "application/schema+json" -jsonpath "$.result.resources[44].size" == 419 +jsonpath "$.result.resources[44].size" == 2345 jsonpath "$.result.resources[44].annotations.priority" == 0 -jsonpath "$.result.resources[45].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/response" -jsonpath "$.result.resources[45].name" == "Sourcemeta One Schema Trace API Response" -jsonpath "$.result.resources[45].description" == "The response format for the schema trace API endpoint" +jsonpath "$.result.resources[45].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/request" +jsonpath "$.result.resources[45].name" == "Sourcemeta One Schema Trace API Request" +jsonpath "$.result.resources[45].description" == "The JSON instance to trace evaluation against a schema in the catalog" jsonpath "$.result.resources[45].mimeType" == "application/schema+json" -jsonpath "$.result.resources[45].size" == 2118 +jsonpath "$.result.resources[45].size" == 419 jsonpath "$.result.resources[45].annotations.priority" == 0 -jsonpath "$.result.resources[46].uri" == "{{base}}/self/v1/schemas/mcp/error" -jsonpath "$.result.resources[46].name" == "Sourcemeta One MCP Error Response" -jsonpath "$.result.resources[46].description" == "The error response Sourcemeta One returns when an MCP request fails" +jsonpath "$.result.resources[46].uri" == "{{base}}/self/v1/schemas/api/schemas/trace/response" +jsonpath "$.result.resources[46].name" == "Sourcemeta One Schema Trace API Response" +jsonpath "$.result.resources[46].description" == "The response format for the schema trace API endpoint" jsonpath "$.result.resources[46].mimeType" == "application/schema+json" -jsonpath "$.result.resources[46].size" == 5860 +jsonpath "$.result.resources[46].size" == 2290 jsonpath "$.result.resources[46].annotations.priority" == 0 -jsonpath "$.result.resources[47].uri" == "{{base}}/self/v1/schemas/mcp/initialize/request" -jsonpath "$.result.resources[47].name" == "Sourcemeta One MCP Initialize Request" -jsonpath "$.result.resources[47].description" == "Connection handshake from a client" +jsonpath "$.result.resources[47].uri" == "{{base}}/self/v1/schemas/mcp/error" +jsonpath "$.result.resources[47].name" == "Sourcemeta One MCP Error Response" +jsonpath "$.result.resources[47].description" == "The error response Sourcemeta One returns when an MCP request fails" jsonpath "$.result.resources[47].mimeType" == "application/schema+json" -jsonpath "$.result.resources[47].size" == 4617 +jsonpath "$.result.resources[47].size" == 5860 jsonpath "$.result.resources[47].annotations.priority" == 0 -jsonpath "$.result.resources[48].uri" == "{{base}}/self/v1/schemas/mcp/initialize/response" -jsonpath "$.result.resources[48].name" == "Sourcemeta One MCP Initialize Response" -jsonpath "$.result.resources[48].description" == "Sourcemeta One's response to a client's initialization" +jsonpath "$.result.resources[48].uri" == "{{base}}/self/v1/schemas/mcp/initialize/request" +jsonpath "$.result.resources[48].name" == "Sourcemeta One MCP Initialize Request" +jsonpath "$.result.resources[48].description" == "Connection handshake from a client" jsonpath "$.result.resources[48].mimeType" == "application/schema+json" -jsonpath "$.result.resources[48].size" == 2524 +jsonpath "$.result.resources[48].size" == 4617 jsonpath "$.result.resources[48].annotations.priority" == 0 -jsonpath "$.result.resources[49].uri" == "{{base}}/self/v1/schemas/mcp/notifications/cancelled" -jsonpath "$.result.resources[49].name" == "Sourcemeta One MCP Cancelled Notification" -jsonpath "$.result.resources[49].description" == "Cancellation hint from a client for an in-flight request. Sourcemeta One accepts and discards these" +jsonpath "$.result.resources[49].uri" == "{{base}}/self/v1/schemas/mcp/initialize/response" +jsonpath "$.result.resources[49].name" == "Sourcemeta One MCP Initialize Response" +jsonpath "$.result.resources[49].description" == "Sourcemeta One's response to a client's initialization" jsonpath "$.result.resources[49].mimeType" == "application/schema+json" -jsonpath "$.result.resources[49].size" == 1163 +jsonpath "$.result.resources[49].size" == 2524 jsonpath "$.result.resources[49].annotations.priority" == 0 jsonpath "$.result.nextCursor" == "100" diff --git a/enterprise/e2e/html/hurl/schemas-fragment.all.hurl b/enterprise/e2e/html/hurl/schemas-fragment.all.hurl index bb8271bb7..1cfff277e 100644 --- a/enterprise/e2e/html/hurl/schemas-fragment.all.hurl +++ b/enterprise/e2e/html/hurl/schemas-fragment.all.hurl @@ -196,7 +196,7 @@ Cache-Control: no-store Access-Control-Allow-Origin: * Access-Control-Expose-Headers: Link, ETag Access-Control-Allow-Methods: POST, OPTIONS -Access-Control-Allow-Headers: Content-Type +Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Max-Age: 3600 Allow: POST, OPTIONS [Asserts] @@ -212,7 +212,7 @@ Cache-Control: no-store Access-Control-Allow-Origin: * Access-Control-Expose-Headers: Link, ETag Access-Control-Allow-Methods: POST, OPTIONS -Access-Control-Allow-Headers: Content-Type +Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Max-Age: 3600 Allow: POST, OPTIONS [Asserts] diff --git a/src/actions/action_jsonschema_evaluate_v1.h b/src/actions/action_jsonschema_evaluate_v1.h index 8cc6b8c8a..cda0abcdb 100644 --- a/src/actions/action_jsonschema_evaluate_v1.h +++ b/src/actions/action_jsonschema_evaluate_v1.h @@ -137,27 +137,11 @@ class ActionJSONSchemaEvaluateV1 : public sourcemeta::one::RouterAction { const std::string_view error_schema, const std::string_view request_schema, Perform perform) -> void { - const auto &path{matches.front()}; - if (request.method() == "options") { - response.write_status(sourcemeta::core::HTTP_STATUS_NO_CONTENT); - response.write_header("Access-Control-Allow-Origin", "*"); - response.write_header("Access-Control-Expose-Headers", "Link, ETag"); - response.write_header("Access-Control-Allow-Methods", "POST, OPTIONS"); - response.write_header("Access-Control-Allow-Headers", "Content-Type"); - response.write_header("Access-Control-Max-Age", "3600"); - // Browser preflight cache is governed by `Access-Control-Max-Age`; - // `no-store` keeps shared HTTP caches from storing this response. - response.write_header("Cache-Control", - sourcemeta::one::cache_control_no_store()); - // RFC 9110 §9.3.7: OPTIONS responses SHOULD include Allow. Different - // audience than Access-Control-Allow-Methods (HTTP vs CORS preflight). - // https://datatracker.ietf.org/doc/html/rfc9110#section-9.3.7 - response.write_header("Allow", "POST, OPTIONS"); - sourcemeta::one::send_response(sourcemeta::core::HTTP_STATUS_NO_CONTENT, - request, response); + if (self.schema_post_preflight(request, response)) { return; } + const auto &path{matches.front()}; if (path.find('#') != std::string_view::npos || path.find("%23") != std::string_view::npos) { sourcemeta::one::json_error( @@ -167,12 +151,7 @@ class ActionJSONSchemaEvaluateV1 : public sourcemeta::one::RouterAction { return; } - if (request.method() != "post") { - sourcemeta::one::json_error( - request, response, sourcemeta::core::HTTP_STATUS_METHOD_NOT_ALLOWED, - "urn:sourcemeta:one:method-not-allowed", - "This HTTP method is invalid for this URL", error_schema, "*", - "POST, OPTIONS"); + if (self.schema_post_method_refused(request, response, error_schema)) { return; } @@ -206,118 +185,21 @@ class ActionJSONSchemaEvaluateV1 : public sourcemeta::one::RouterAction { return; } - // RFC 9110 §10.1.1: refuse unrecognised expectations with 417 before - // touching the body. uWS already auto-acknowledged `100-continue` - // upstream, so anything left here is a value we cannot honour. - if (sourcemeta::one::expect_header_unrecognised(request)) { - sourcemeta::one::json_error( - request, response, sourcemeta::core::HTTP_STATUS_EXPECTATION_FAILED, - "urn:sourcemeta:one:expectation-failed", - "The Expect header carries an unsupported expectation", error_schema, - "*"); - return; - } - - // RFC 9110 §15.5.14: when the client declares a `Content-Length` - // beyond the cap, fast-fail with 413 before scheduling the read. - if (sourcemeta::one::request_body_too_large(request)) { - sourcemeta::one::json_error( - request, response, sourcemeta::core::HTTP_STATUS_CONTENT_TOO_LARGE, - "urn:sourcemeta:one:payload-too-large", - "The request body is too large", error_schema, "*"); - return; - } - - request.body( + self.schema_post_body( + request, response, response_schema, error_schema, + sourcemeta::one::MAX_REQUEST_BODY_BYTES, // A throw here is intended and caught by the surrounding error // handler // NOLINTNEXTLINE(bugprone-exception-escape) - [response_schema, error_schema, schema_uri = std::move(schema_uri), - &self, request_schema, perform = std::move(perform)]( - sourcemeta::one::HTTPRequest &callback_request, - sourcemeta::one::HTTPResponse &callback_response, - std::string &&body, bool too_big) -> void { - if (too_big) { - sourcemeta::one::json_error( - callback_request, callback_response, - sourcemeta::core::HTTP_STATUS_CONTENT_TOO_LARGE, - "urn:sourcemeta:one:payload-too-large", - "The request body is too large", error_schema, "*"); - return; - } - - if (body.empty()) { - sourcemeta::one::json_error( - callback_request, callback_response, - sourcemeta::core::HTTP_STATUS_BAD_REQUEST, - "urn:sourcemeta:one:no-instance", - "You must pass an instance to validate against", error_schema, - "*"); - return; - } - - sourcemeta::core::JSON instance{nullptr}; - try { - instance = sourcemeta::core::parse_json(body); - } catch (const std::exception &) { - sourcemeta::one::json_error( - callback_request, callback_response, - sourcemeta::core::HTTP_STATUS_BAD_REQUEST, - "urn:sourcemeta:one:invalid-json", - "The request body is not valid JSON", error_schema, "*"); - return; - } - + [&self, request_schema, schema_uri = std::move(schema_uri), + perform = std::move(perform)]( + const std::string &body) -> sourcemeta::core::JSON { + const auto instance{sourcemeta::core::parse_json(body)}; if (!self.structural_evaluate_fast(request_schema, instance)) { - sourcemeta::one::json_error( - callback_request, callback_response, - sourcemeta::core::HTTP_STATUS_BAD_REQUEST, - "urn:sourcemeta:one:invalid-request", - "The request body does not match the expected schema", - error_schema, "*"); - return; + throw sourcemeta::one::SchemaPostRequestError{}; } - try { - const auto result{perform(schema_uri, body)}; - callback_response.write_status(sourcemeta::core::HTTP_STATUS_OK); - callback_response.write_header("Content-Type", "application/json"); - callback_response.write_header("Access-Control-Allow-Origin", "*"); - callback_response.write_header("Access-Control-Expose-Headers", - "Link, ETag"); - // The response is fully determined by the POST body. A - // shared cache cannot use this for any other request, so - // skip caching altogether. - callback_response.write_header( - "Cache-Control", sourcemeta::one::cache_control_no_store()); - sourcemeta::one::write_link_header(callback_response, - response_schema); - std::ostringstream payload; - sourcemeta::core::prettify(result, payload); - sourcemeta::one::send_response(sourcemeta::core::HTTP_STATUS_OK, - callback_request, callback_response, - payload.str(), - sourcemeta::one::Encoding::Identity); - } catch (const std::exception &exception) { - sourcemeta::one::json_error( - callback_request, callback_response, - sourcemeta::core::HTTP_STATUS_INTERNAL_SERVER_ERROR, - "urn:sourcemeta:one:schema-evaluation-error", exception.what(), - error_schema, "*"); - } - }, - [error_schema](sourcemeta::one::HTTPRequest &callback_request, - sourcemeta::one::HTTPResponse &callback_response, - const std::exception_ptr &error) -> void { - try { - std::rethrow_exception(error); - } catch (const std::exception &exception) { - sourcemeta::one::json_error( - callback_request, callback_response, - sourcemeta::core::HTTP_STATUS_INTERNAL_SERVER_ERROR, - "urn:sourcemeta:one:uncaught-error", exception.what(), - error_schema, "*"); - } + return perform(schema_uri, body); }); } diff --git a/src/actions/action_jsonschema_trace_v1.h b/src/actions/action_jsonschema_trace_v1.h index 796adb63b..a998d21e3 100644 --- a/src/actions/action_jsonschema_trace_v1.h +++ b/src/actions/action_jsonschema_trace_v1.h @@ -19,6 +19,7 @@ #include "action_jsonschema_evaluate_v1.h" #include // std::filesystem::path +#include // std::ref #include // std::span #include // std::runtime_error #include // std::string @@ -84,8 +85,12 @@ class ActionJSONSchemaTraceV1 : public sourcemeta::one::RouterAction { // was handed points at a request that is gone by now const auto deferred_caller{ this->caller_from({.bearer = bearer, .cookies = fields})}; - return this->trace(deferred_caller, schema_uri, instance_json, - &tracker, sourcemeta::core::Pointer{}); + const auto schema_template{ + this->blaze_template(deferred_caller, schema_uri, + sourcemeta::blaze::Mode::Exhaustive)}; + return ActionJSONSchemaTraceV1::build_trace_document( + *schema_template, instance_json, &tracker, + sourcemeta::core::Pointer{}); }); } @@ -134,21 +139,25 @@ class ActionJSONSchemaTraceV1 : public sourcemeta::one::RouterAction { return sourcemeta::core::mcp_make_tool_success( version, request_id, - this->trace(caller, schema_uri, parsed_instance, &tracker, - sourcemeta::core::Pointer{})); + ActionJSONSchemaTraceV1::build_trace_document( + *this->blaze_template(caller, schema_uri, + sourcemeta::blaze::Mode::Exhaustive), + parsed_instance, &tracker, sourcemeta::core::Pointer{})); } -private: - auto trace(const sourcemeta::one::Authentication::Caller &caller, - const std::string_view schema_uri, - const sourcemeta::core::JSON &instance_json, - const sourcemeta::core::PointerPositionTracker *tracker, - const sourcemeta::core::Pointer &instance_prefix) + // Build the trace document for one evaluation. The instance prefix locates + // the instance within the document the tracker was built over, which is that + // document itself where the body is a bare instance, and the member holding + // it where the body is an envelope + static auto + build_trace_document(const sourcemeta::blaze::Template &schema_template, + const sourcemeta::core::JSON &instance_json, + const sourcemeta::core::PointerPositionTracker *tracker, + const sourcemeta::core::Pointer &instance_prefix) -> sourcemeta::core::JSON { auto steps{sourcemeta::core::JSON::make_array()}; - const auto result{this->schema_evaluate_with_tracing( - caller, schema_uri, instance_json, + const sourcemeta::blaze::TraceOutput::Callback callback{ [&steps, tracker, &instance_prefix, &instance_json]( const sourcemeta::blaze::TraceOutput::Entry &entry) -> void { auto step{sourcemeta::core::JSON::make_object()}; @@ -205,7 +214,12 @@ class ActionJSONSchemaTraceV1 : public sourcemeta::one::RouterAction { } steps.push_back(std::move(step)); - })}; + }}; + + sourcemeta::blaze::TraceOutput output{schema_template, callback}; + sourcemeta::blaze::Evaluator evaluator; + const auto result{ + evaluator.validate(schema_template, instance_json, std::ref(output))}; auto document{sourcemeta::core::JSON::make_object()}; document.assign("valid", sourcemeta::core::JSON{result}); @@ -213,6 +227,7 @@ class ActionJSONSchemaTraceV1 : public sourcemeta::one::RouterAction { return document; } +private: std::string_view request_schema_; std::string_view response_schema_; std::string_view rpc_request_schema_; diff --git a/src/actions/action_playground_schema_trace_v1.h b/src/actions/action_playground_schema_trace_v1.h new file mode 100644 index 000000000..a721d4b65 --- /dev/null +++ b/src/actions/action_playground_schema_trace_v1.h @@ -0,0 +1,109 @@ +#ifndef SOURCEMETA_ONE_ACTIONS_PLAYGROUND_SCHEMA_TRACE_V1_H +#define SOURCEMETA_ONE_ACTIONS_PLAYGROUND_SCHEMA_TRACE_V1_H + +#include +#include +#include +#include + +#include +#include +#include + +#include "action_jsonschema_trace_v1.h" + +#include // std::filesystem::path +#include // std::ref +#include // std::span +#include // std::string +#include // std::string_view + +class ActionPlaygroundSchemaTraceV1 : public sourcemeta::one::RouterAction { +public: + static constexpr std::string_view DESCRIPTION{ + "Validate a JSON instance against a schema the caller supplies in the " + "request rather than one this catalog holds, and return a step-by-step " + "trace of the evaluation. References to schemas in this catalog are " + "resolved as far as the caller may read them, and references to anywhere " + "else are refused"}; + static constexpr bool READ_ONLY{true}; + static constexpr bool DESTRUCTIVE{false}; + static constexpr bool IDEMPOTENT{true}; + static constexpr bool OPEN_WORLD{false}; + + ActionPlaygroundSchemaTraceV1( + const std::filesystem::path &base, + const sourcemeta::core::URITemplateRouterView &router, + const sourcemeta::core::URITemplateRouter::Identifier identifier, + sourcemeta::one::Router &dispatcher) + : sourcemeta::one::RouterAction{base, router.base_url(), dispatcher} { + router.arguments( + identifier, [this](const auto &key, const auto &value) -> void { + if (key == "requestSchema") { + this->request_schema_ = std::get(value); + } else if (key == "responseSchema") { + this->response_schema_ = std::get(value); + } else if (key == "errorSchema") { + this->error_schema_ = std::get(value); + } + }); + } + + auto rest(const std::span, + const sourcemeta::one::Authentication::Caller &, + sourcemeta::one::HTTPRequest &request, + sourcemeta::one::HTTPResponse &response) -> void override { + if (this->schema_post_preflight(request, response) || + this->schema_post_method_refused(request, response, + this->error_schema_)) { + return; + } + + this->schema_post_body( + request, response, this->response_schema_, this->error_schema_, + sourcemeta::one::MAX_PLAYGROUND_REQUEST_BODY_BYTES, + // A throw here is intended and caught by the surrounding request + // handler + // NOLINTNEXTLINE(bugprone-exception-escape) + [this, + bearer = std::string{sourcemeta::core::http_parse_bearer( + request.header("authorization"))}, + cookies = sourcemeta::one::owned_cookies(request)]( + const std::string &body) -> sourcemeta::core::JSON { + sourcemeta::core::PointerPositionTracker tracker; + sourcemeta::core::JSON envelope{nullptr}; + sourcemeta::core::parse_json(body, envelope, std::ref(tracker)); + if (!this->structural_evaluate_fast(this->request_schema_, + envelope)) { + throw sourcemeta::one::SchemaPostRequestError{}; + } + + const sourcemeta::one::RequestCookies fields{cookies}; + // Placed again rather than captured, since the caller this action + // was handed points at a request that is gone by now + const auto deferred_caller{ + this->caller_from({.bearer = bearer, .cookies = fields})}; + const auto schema_template{this->compile_playground_schema( + deferred_caller, envelope.at("schema"))}; + return ActionJSONSchemaTraceV1::build_trace_document( + schema_template, envelope.at("instance"), &tracker, + sourcemeta::core::Pointer{"instance"}); + }); + } + + auto mcp(const sourcemeta::core::MCPProtocolVersion, + const sourcemeta::core::JSON &request_id, + const sourcemeta::core::JSON &, + const sourcemeta::one::Authentication::Caller &) + -> sourcemeta::core::JSON override { + return sourcemeta::core::mcp_make_tool_error( + request_id, "This action is not exposed as a tool"); + } + +private: + std::string_view request_schema_; + std::string_view response_schema_; + std::string_view error_schema_; +}; + +#endif diff --git a/src/actions/actions.cc b/src/actions/actions.cc index 7596fe6f2..f084ebdab 100644 --- a/src/actions/actions.cc +++ b/src/actions/actions.cc @@ -25,6 +25,7 @@ #include "action_mcp_v1.h" #include "action_metrics_v1.h" #include "action_not_found_v1.h" +#include "action_playground_schema_trace_v1.h" #include "action_schema_search_v1.h" #include "action_serve_explorer_artifact_v1.h" #include "action_serve_schema_artifact_v1.h" diff --git a/src/actions/include/sourcemeta/one/actions.h b/src/actions/include/sourcemeta/one/actions.h index 2ec7d013c..6ed05f63a 100644 --- a/src/actions/include/sourcemeta/one/actions.h +++ b/src/actions/include/sourcemeta/one/actions.h @@ -52,7 +52,9 @@ namespace sourcemeta::one { X(AUTH_CALLBACK_V1, ActionAuthCallbackV1, "auth_callback_v1") \ X(MCP_PROTECTED_RESOURCE_METADATA_V1, ActionMCPProtectedResourceMetadataV1, \ "mcp_protected_resource_metadata_v1") \ - X(METRICS_V1, ActionMetricsV1, "metrics_v1") + X(METRICS_V1, ActionMetricsV1, "metrics_v1") \ + X(PLAYGROUND_SCHEMA_TRACE_V1, ActionPlaygroundSchemaTraceV1, \ + "playground_schema_trace_v1") #define SOURCEMETA_ONE_DEFINE_ACTION_TYPE(Name, Class, Label) \ ACTION_TYPE_##Name, diff --git a/src/http/include/sourcemeta/one/http_helpers.h b/src/http/include/sourcemeta/one/http_helpers.h index 2fbdab20c..c0d99db6f 100644 --- a/src/http/include/sourcemeta/one/http_helpers.h +++ b/src/http/include/sourcemeta/one/http_helpers.h @@ -188,10 +188,13 @@ inline auto expect_header_unrecognised(const HTTPRequest &request) -> bool { // `Expect: 100-continue` requests, but well-behaved clients abort // their upload on a mid-stream 4xx, so the fast-fail still saves // both sides bandwidth versus reading bytes until the cap trips. -inline auto request_body_too_large(const HTTPRequest &request) -> bool { +inline auto +request_body_too_large(const HTTPRequest &request, + const std::size_t max_body = MAX_REQUEST_BODY_BYTES) + -> bool { const auto declared{ sourcemeta::core::to_uint64_t(request.header("content-length"))}; - return declared.has_value() && declared.value() > MAX_REQUEST_BODY_BYTES; + return declared.has_value() && declared.value() > max_body; } // Answering can be the last thing that happens on a connection, and a request diff --git a/src/index/endpoints.h b/src/index/endpoints.h index 21181e03c..115f5440b 100644 --- a/src/index/endpoints.h +++ b/src/index/endpoints.h @@ -31,6 +31,8 @@ inline constexpr std::string_view ENDPOINT_SCHEMA_RDF{ "/self/v1/api/schemas/rdf/{+schema}"}; inline constexpr std::string_view ENDPOINT_SCHEMA_TRACE{ "/self/v1/api/schemas/trace/{+schema}"}; +inline constexpr std::string_view ENDPOINT_PLAYGROUND_SCHEMA_TRACE{ + "/self/v1/api/playground/schemas/trace"}; inline constexpr std::string_view ENDPOINT_SCHEMA_SEARCH{ "/self/v1/api/schemas/search"}; inline constexpr std::string_view ENDPOINT_HEALTH{"/self/v1/health"}; diff --git a/src/index/generators.h b/src/index/generators.h index 70267bcef..dd835bd94 100644 --- a/src/index/generators.h +++ b/src/index/generators.h @@ -853,6 +853,10 @@ struct GenerateURITemplateRoutes { "/self/v1/schemas/api/schemas/rdf/response"}; constexpr std::string_view TRACE_REQUEST_SCHEMA{ "/self/v1/schemas/api/schemas/trace/request"}; + constexpr std::string_view PLAYGROUND_SCHEMA_TRACE_REQUEST_SCHEMA{ + "/self/v1/schemas/api/playground/schemas/trace/request"}; + constexpr std::string_view PLAYGROUND_SCHEMA_TRACE_RESPONSE_SCHEMA{ + "/self/v1/schemas/api/playground/schemas/trace/response"}; constexpr std::string_view TRACE_RESPONSE_SCHEMA{ "/self/v1/schemas/api/schemas/trace/response"}; constexpr std::string_view SEARCH_RESPONSE_SCHEMA{ @@ -1065,6 +1069,18 @@ struct GenerateURITemplateRoutes { sourcemeta::one::ACTION_TYPE_JSONSCHEMA_TRACE_V1, trace_arguments); + const auto playground_schema_trace_arguments{ + std::to_array( + {{"requestSchema", + std::string_view{PLAYGROUND_SCHEMA_TRACE_REQUEST_SCHEMA}}, + {"responseSchema", + std::string_view{PLAYGROUND_SCHEMA_TRACE_RESPONSE_SCHEMA}}, + {"errorSchema", std::string_view{ERROR_SCHEMA}}})}; + router.add(sourcemeta::one::ENDPOINT_PLAYGROUND_SCHEMA_TRACE, + "playground_trace_schema", next_id++, + sourcemeta::one::ACTION_TYPE_PLAYGROUND_SCHEMA_TRACE_V1, + playground_schema_trace_arguments); + const auto search_arguments{ std::to_array( {{"responseSchema", std::string_view{SEARCH_RESPONSE_SCHEMA}}, diff --git a/src/router/evaluate.cc b/src/router/evaluate.cc index 7aeaeb442..f14475d26 100644 --- a/src/router/evaluate.cc +++ b/src/router/evaluate.cc @@ -1,18 +1,181 @@ #include #include +#include #include #include #include #include // assert +#include // std::uint64_t +#include // std::exception #include // std::ref #include // std::make_shared, std::shared_ptr #include // std::string_view #include // std::move, std::pair +#include // std::vector namespace sourcemeta::one { +namespace { + +// What a playground schema may cost, as multiples of the worst case across +// every schema the sandboxes index, measured 2026-09-07. The body cap normally +// refuses a schema before the instruction budget can fire, which leaves that +// one standing as a backstop for a schema whose compiled size outgrows what it +// is written down as +inline constexpr std::uint64_t MAX_PLAYGROUND_SCHEMA_LOCATIONS{80000}; +inline constexpr std::uint64_t MAX_PLAYGROUND_SCHEMA_INSTRUCTIONS{400000}; +inline constexpr std::uint64_t MAX_PLAYGROUND_SCHEMA_DEPTH{44}; +// How deeply the document itself may nest, which is a separate question from +// how deeply compilation descends, since a schema can bury a value far below +// any subschema. The deepest schema across the sandboxes nests 48 +inline constexpr std::uint64_t MAX_PLAYGROUND_SCHEMA_JSON_DEPTH{256}; + +// Resolve a reference from a playground schema the way this registry would +// it for whoever asked. What the caller may not read does not resolve, and +// neither does anything outside this instance +class PlaygroundSchemaResolver { +public: + PlaygroundSchemaResolver(const RouterAction &action, + const Authentication::Caller &caller) + : action_{&action}, caller_{&caller} {} + + [[nodiscard]] auto operator()(const std::string_view identifier) const + -> sourcemeta::blaze::SchemaResolverResult { + const auto resolution{this->action_->artifact_resolve_path( + *this->caller_, identifier, RouterAction::Tree::Schemas, "schema")}; + if (resolution.path.has_value()) { + auto schema{this->action_->artifact_read_json(resolution.path.value())}; + if (schema.has_value()) { + return std::move(schema).value(); + } + } + + return sourcemeta::blaze::schema_resolver(identifier); + } + +private: + const RouterAction *action_; + const Authentication::Caller *caller_; +}; + +// Place a reference that would not resolve within the schema the caller sent, +// by framing what they wrote rather than trusting what compilation reported. +// Nothing is named that does not appear in their own document, so a refusal +// tells them where they went wrong without telling them what this instance +// holds +auto unresolvable_reference(const sourcemeta::core::JSON &document, + const sourcemeta::blaze::SchemaResolver &resolver, + const std::string_view identifier) + -> PlaygroundSchemaError { + std::string reference; + std::string location; + + try { + const sourcemeta::blaze::SchemaFrame frame{ + sourcemeta::blaze::SchemaFrame::Mode::References, + document, + sourcemeta::blaze::schema_walker, + resolver, + "", + "", + sourcemeta::blaze::SchemaFrame::IdentifierMode::Additional, + {sourcemeta::core::EMPTY_WEAK_POINTER}, + MAX_PLAYGROUND_SCHEMA_LOCATIONS}; + frame.for_each_unresolved_reference( + [&reference, &location, identifier]( + const sourcemeta::core::WeakPointer &pointer, + const sourcemeta::blaze::SchemaFrame::Reference &entry) -> void { + if (reference.empty() && + (entry.destination == identifier || entry.base == identifier)) { + reference = entry.destination; + location = sourcemeta::core::to_string(pointer); + } + }); + // A schema that would not compile may not frame either, and a reference + // this cannot place is one this does not name + // NOLINTNEXTLINE(bugprone-empty-catch) + } catch (const std::exception &) { + } + + // A dialect that resolves nowhere is a reference too, and framing cannot + // report it because framing is what failed on it. Any resource of the + // document may declare one, so this looks past the root + if (reference.empty()) { + std::vector< + std::pair> + pending; + pending.emplace_back(&document, sourcemeta::core::Pointer{}); + + while (!pending.empty() && reference.empty()) { + const auto entry{pending.back()}; + pending.pop_back(); + + if (entry.first->is_object()) { + for (const auto &member : entry.first->as_object()) { + auto nested{entry.second}; + nested.push_back(member.first); + if (member.first == "$schema" && member.second.is_string() && + member.second.to_string() == identifier) { + reference = member.second.to_string(); + location = sourcemeta::core::to_string(nested); + break; + } + + pending.emplace_back(&member.second, std::move(nested)); + } + } else if (entry.first->is_array()) { + std::size_t index{0}; + for (const auto &member : entry.first->as_array()) { + auto nested{entry.second}; + nested.push_back(index); + pending.emplace_back(&member, std::move(nested)); + index += 1; + } + } + } + } + + return {sourcemeta::core::HTTP_STATUS_BAD_REQUEST, + "urn:sourcemeta:one:unresolvable-reference", + "A reference in the supplied schema could not be resolved", + std::move(reference), std::move(location)}; +} + +// Framing walks the whole schema before any compiler budget applies, so a +// document nested deeply enough exhausts the stack before `max_depth` can +// refuse it. This bounds the shape of what is walked rather than what is +// compiled, and measures iteratively so that checking is not itself the thing +// that overflows +auto exceeds_json_depth(const sourcemeta::core::JSON &document, + const std::uint64_t limit) -> bool { + std::vector> pending; + pending.emplace_back(&document, 1); + + while (!pending.empty()) { + const auto entry{pending.back()}; + pending.pop_back(); + if (entry.second > limit) { + return true; + } + + if (entry.first->is_object()) { + for (const auto &member : entry.first->as_object()) { + pending.emplace_back(&member.second, entry.second + 1); + } + } else if (entry.first->is_array()) { + for (const auto &member : entry.first->as_array()) { + pending.emplace_back(&member, entry.second + 1); + } + } + } + + return false; +} + +} // namespace + auto Router::blaze_template(const ResolvedArtifact &artifact) -> std::shared_ptr { return this->template_cache_.get_or_compute( @@ -112,4 +275,62 @@ auto RouterAction::schema_evaluate_with_tracing( return evaluator.validate(*schema_template, instance, std::ref(output)); } +// Compile a playground schema under the budgets, resolving as the given +// Whatever compilation refuses becomes the answer the caller is owed, since a +// schema they wrote failing to compile is a fact about their request +auto RouterAction::compile_playground_schema( + const Authentication::Caller &caller, + const sourcemeta::core::JSON &schema) const -> sourcemeta::blaze::Template { + if (exceeds_json_depth(schema, MAX_PLAYGROUND_SCHEMA_JSON_DEPTH)) { + throw PlaygroundSchemaError{ + sourcemeta::core::HTTP_STATUS_UNPROCESSABLE_CONTENT, + "urn:sourcemeta:one:schema-too-complex", + "The supplied schema is too complex to compile on demand, so try a " + "simpler one or add it to the catalog, where no such limit applies"}; + } + + const PlaygroundSchemaResolver resolver{*this, caller}; + const sourcemeta::blaze::Tweaks tweaks{ + .max_instructions = MAX_PLAYGROUND_SCHEMA_INSTRUCTIONS, + .max_depth = MAX_PLAYGROUND_SCHEMA_DEPTH}; + + try { + return sourcemeta::blaze::compile( + schema, sourcemeta::blaze::schema_walker, std::ref(resolver), + sourcemeta::blaze::default_schema_compiler, + sourcemeta::blaze::Mode::Exhaustive, "", "", "", tweaks, + MAX_PLAYGROUND_SCHEMA_LOCATIONS); + } catch (const sourcemeta::blaze::SchemaFrameLimitError &) { + throw PlaygroundSchemaError{ + sourcemeta::core::HTTP_STATUS_UNPROCESSABLE_CONTENT, + "urn:sourcemeta:one:schema-too-complex", + "The supplied schema is too complex to compile on demand, so try a " + "simpler one or add it to the catalog, where no such limit applies"}; + } catch (const sourcemeta::blaze::CompilerInstructionLimitError &) { + throw PlaygroundSchemaError{ + sourcemeta::core::HTTP_STATUS_UNPROCESSABLE_CONTENT, + "urn:sourcemeta:one:schema-too-complex", + "The supplied schema is too complex to compile on demand, so try a " + "simpler one or add it to the catalog, where no such limit applies"}; + } catch (const sourcemeta::blaze::CompilerDepthLimitError &) { + throw PlaygroundSchemaError{ + sourcemeta::core::HTTP_STATUS_UNPROCESSABLE_CONTENT, + "urn:sourcemeta:one:schema-too-complex", + "The supplied schema is too complex to compile on demand, so try a " + "simpler one or add it to the catalog, where no such limit applies"}; + } catch (const sourcemeta::blaze::SchemaResolutionError &error) { + throw unresolvable_reference(schema, std::ref(resolver), + error.identifier()); + } catch (const sourcemeta::blaze::SchemaReferenceError &error) { + throw unresolvable_reference(schema, std::ref(resolver), + error.identifier()); + } catch (const PlaygroundSchemaError &) { + throw; + } catch (const std::exception &) { + throw PlaygroundSchemaError{sourcemeta::core::HTTP_STATUS_BAD_REQUEST, + "urn:sourcemeta:one:invalid-schema", + "The supplied schema could not be compiled"}; + } +} + } // namespace sourcemeta::one diff --git a/src/router/include/sourcemeta/one/router.h b/src/router/include/sourcemeta/one/router.h index 84c899839..4005f75d7 100644 --- a/src/router/include/sourcemeta/one/router.h +++ b/src/router/include/sourcemeta/one/router.h @@ -30,6 +30,60 @@ namespace sourcemeta::one { class Router; class RouterAction; +// The body did not match what the route accepts +struct SchemaPostRequestError final : std::exception { + [[nodiscard]] auto what() const noexcept -> const char * override { + return "The request body does not match the expected schema"; + } +}; + +// What a playground compilation refused, carried out of the deferred body so +// the answer names the reason rather than reporting a generic failure +class PlaygroundSchemaError final : public std::exception { +public: + PlaygroundSchemaError(const sourcemeta::core::HTTPStatus &status, + const std::string_view type, const char *detail, + std::string reference = {}, std::string location = {}) + : status_{status}, type_{type}, detail_{detail}, + reference_{std::move(reference)}, location_{std::move(location)} {} + + [[nodiscard]] auto what() const noexcept -> const char * override { + return this->detail_; + } + + [[nodiscard]] auto status() const noexcept + -> const sourcemeta::core::HTTPStatus & { + return this->status_; + } + + [[nodiscard]] auto type() const noexcept -> std::string_view { + return this->type_; + } + + // The reference that did not resolve, and where in the supplied schema it + // was written. Both are empty where this could not place the reference in + // what the caller sent, since nothing is named that they did not write + [[nodiscard]] auto reference() const noexcept -> const std::string & { + return this->reference_; + } + + [[nodiscard]] auto location() const noexcept -> const std::string & { + return this->location_; + } + +private: + sourcemeta::core::HTTPStatus status_; + std::string_view type_; + const char *detail_; + std::string reference_; + std::string location_; +}; + +// The largest body a route that compiles what it carries will read, which is +// smaller than what a route reading a precomputed artifact accepts +inline constexpr std::size_t MAX_PLAYGROUND_REQUEST_BODY_BYTES{ + static_cast(1) * 1024 * 1024}; + // The cookie fields a request carried, held for as long as the credentials // that view them. A request may present the field more than once, so every // occurrence is kept rather than the first, and they are not joined, since @@ -302,6 +356,159 @@ class RouterAction { [[nodiscard]] auto canonical_path(std::string_view input) const -> std::optional; + // Compile a schema the caller supplied under the budgets that bound what a + // request may spend, resolving its references as that caller. Whatever + // compilation refuses becomes the answer they are owed, since a schema they + // wrote failing to compile is a fact about their request + [[nodiscard]] auto + compile_playground_schema(const Authentication::Caller &caller, + const sourcemeta::core::JSON &schema) const + -> sourcemeta::blaze::Template; + + // Answer a preflight, reporting whether the request was answered here + [[nodiscard]] auto schema_post_preflight(HTTPRequest &request, + HTTPResponse &response) const + -> bool; + + // Refuse a method a schema POST route does not serve, reporting whether the + // request was answered here. Kept apart from the preflight so that a route + // with more to say about its target can speak before this does + [[nodiscard]] auto + schema_post_method_refused(HTTPRequest &request, HTTPResponse &response, + std::string_view error_schema) const -> bool; + + // Read a schema POST body and answer with whatever the callback makes of it. + // The body arrives once the request that carried it is gone, so whatever the + // callback needs from that request has to be owned by the time it runs + template + auto schema_post_body(HTTPRequest &request, HTTPResponse &response, + const std::string_view response_schema, + const std::string_view error_schema, + const std::size_t max_body, Perform perform) const + -> void { + // RFC 9110 §10.1.1: refuse unrecognised expectations with 417 before + // touching the body. uWS already auto-acknowledged `100-continue` + // upstream, so anything left here is a value we cannot honour. + if (expect_header_unrecognised(request)) { + json_error(request, response, + sourcemeta::core::HTTP_STATUS_EXPECTATION_FAILED, + "urn:sourcemeta:one:expectation-failed", + "The Expect header carries an unsupported expectation", + error_schema, "*"); + return; + } + + // RFC 9110 §15.5.14: when the client declares a `Content-Length` + // beyond the cap, fast-fail with 413 before scheduling the read. + if (request_body_too_large(request, max_body)) { + json_error(request, response, + sourcemeta::core::HTTP_STATUS_CONTENT_TOO_LARGE, + "urn:sourcemeta:one:payload-too-large", + "The request body is too large", error_schema, "*"); + return; + } + + request.body( + // A throw here is intended and caught by the surrounding error + // handler + // NOLINTNEXTLINE(bugprone-exception-escape) + [response_schema, error_schema, perform = std::move(perform)]( + HTTPRequest &callback_request, HTTPResponse &callback_response, + std::string &&body, bool too_big) -> void { + if (too_big) { + json_error(callback_request, callback_response, + sourcemeta::core::HTTP_STATUS_CONTENT_TOO_LARGE, + "urn:sourcemeta:one:payload-too-large", + "The request body is too large", error_schema, "*"); + return; + } + + if (body.empty()) { + json_error(callback_request, callback_response, + sourcemeta::core::HTTP_STATUS_BAD_REQUEST, + "urn:sourcemeta:one:no-instance", + "You must pass an instance to validate against", + error_schema, "*"); + return; + } + + try { + const auto result{perform(body)}; + callback_response.write_status(sourcemeta::core::HTTP_STATUS_OK); + callback_response.write_header("Content-Type", "application/json"); + callback_response.write_header("Access-Control-Allow-Origin", "*"); + callback_response.write_header("Access-Control-Expose-Headers", + "Link, ETag"); + // The response is fully determined by the POST body. A + // shared cache cannot use this for any other request, so + // skip caching altogether. + callback_response.write_header("Cache-Control", + cache_control_no_store()); + write_link_header(callback_response, response_schema); + std::ostringstream payload; + sourcemeta::core::prettify(result, payload); + send_response(sourcemeta::core::HTTP_STATUS_OK, callback_request, + callback_response, payload.str(), Encoding::Identity); + } catch (const sourcemeta::core::JSONParseError &) { + json_error(callback_request, callback_response, + sourcemeta::core::HTTP_STATUS_BAD_REQUEST, + "urn:sourcemeta:one:invalid-json", + "The request body is not valid JSON", error_schema, "*"); + } catch (const SchemaPostRequestError &error) { + json_error(callback_request, callback_response, + sourcemeta::core::HTTP_STATUS_BAD_REQUEST, + "urn:sourcemeta:one:invalid-request", error.what(), + error_schema, "*"); + } catch (const PlaygroundSchemaError &error) { + if (error.reference().empty()) { + json_error(callback_request, callback_response, error.status(), + error.type(), error.what(), error_schema, "*"); + return; + } + + auto payload{sourcemeta::core::http_make_problem_details( + {.status = error.status(), + .type = error.type(), + .detail = error.what()})}; + payload.assign("reference", + sourcemeta::core::JSON{error.reference()}); + payload.assign("schemaLocation", + sourcemeta::core::JSON{error.location()}); + callback_response.write_status(error.status()); + callback_response.write_header("Content-Type", + "application/problem+json"); + callback_response.write_header("Cache-Control", + cache_control_no_store()); + callback_response.write_header("Access-Control-Allow-Origin", "*"); + callback_response.write_header("Access-Control-Expose-Headers", + "Link, ETag"); + write_link_header(callback_response, error_schema); + std::ostringstream problem; + sourcemeta::core::prettify(payload, problem); + send_response(error.status(), callback_request, callback_response, + problem.str(), Encoding::Identity); + } catch (const std::exception &exception) { + json_error(callback_request, callback_response, + sourcemeta::core::HTTP_STATUS_INTERNAL_SERVER_ERROR, + "urn:sourcemeta:one:schema-evaluation-error", + exception.what(), error_schema, "*"); + } + }, + [error_schema](HTTPRequest &callback_request, + HTTPResponse &callback_response, + const std::exception_ptr &error) -> void { + try { + std::rethrow_exception(error); + } catch (const std::exception &exception) { + json_error(callback_request, callback_response, + sourcemeta::core::HTTP_STATUS_INTERNAL_SERVER_ERROR, + "urn:sourcemeta:one:uncaught-error", exception.what(), + error_schema, "*"); + } + }, + max_body); + } + protected: // Resolution for trees that are not registry content, such as the // compile-time static asset bundle. Same containment discipline as @@ -324,6 +531,14 @@ class RouterAction { std::string_view view, std::string_view input, Tree tree, std::string_view artifact_name) const -> std::optional; + // The compiled form of a schema this registry holds, as the caller may see + // it. An action that evaluates against a template it obtained some other way + // reaches for this to evaluate against a catalog schema on the same terms + [[nodiscard]] auto blaze_template(const Authentication::Caller &caller, + std::string_view schema_uri, + sourcemeta::blaze::Mode mode) const + -> std::shared_ptr; + private: [[nodiscard]] auto artifact_locate(const Authentication::Path &path, Tree tree, std::string_view view, @@ -334,11 +549,6 @@ class RouterAction { sourcemeta::blaze::Mode mode) const -> std::shared_ptr; - [[nodiscard]] auto blaze_template(const Authentication::Caller &caller, - std::string_view schema_uri, - sourcemeta::blaze::Mode mode) const - -> std::shared_ptr; - // NOLINTNEXTLINE(cppcoreguidelines-avoid-const-or-ref-data-members) const std::filesystem::path &index_directory_; std::string_view server_uri_; diff --git a/src/router/router.cc b/src/router/router.cc index 617ed29a4..929fa8b77 100644 --- a/src/router/router.cc +++ b/src/router/router.cc @@ -229,4 +229,32 @@ auto RouterAction::serve_renewal_page( return this->serve_renewal(request, response); } +auto RouterAction::schema_post_preflight(HTTPRequest &request, + HTTPResponse &response) const -> bool { + if (request.method() != "options") { + return false; + } + + // A caller reaching a governed route sends a credential, and a browser only + // sends one the preflight admitted + cors_preflight(request, response, "POST, OPTIONS", + "Content-Type, Authorization"); + return true; +} + +auto RouterAction::schema_post_method_refused( + HTTPRequest &request, HTTPResponse &response, + const std::string_view error_schema) const -> bool { + if (request.method() == "post") { + return false; + } + + json_error(request, response, + sourcemeta::core::HTTP_STATUS_METHOD_NOT_ALLOWED, + "urn:sourcemeta:one:method-not-allowed", + "This HTTP method is invalid for this URL", error_schema, "*", + "POST, OPTIONS"); + return true; +} + } // namespace sourcemeta::one diff --git a/src/self/v1/schemas/api/error.json b/src/self/v1/schemas/api/error.json index fc7287bca..a00f49e1f 100644 --- a/src/self/v1/schemas/api/error.json +++ b/src/self/v1/schemas/api/error.json @@ -129,6 +129,55 @@ "detail": "The request body does not match the expected schema" } }, + { + "const": { + "type": "urn:sourcemeta:one:invalid-schema", + "title": "Bad Request", + "status": 400, + "detail": "The supplied schema could not be compiled" + } + }, + { + "type": "object", + "required": [ "type", "title", "status", "detail" ], + "properties": { + "type": { + "const": "urn:sourcemeta:one:unresolvable-reference" + }, + "title": { + "const": "Bad Request" + }, + "status": { + "const": 400 + }, + "detail": { + "const": "A reference in the supplied schema could not be resolved" + }, + "reference": { + "description": "The reference that could not be resolved, as the caller wrote it in the supplied schema. Absent where this could not place it in what they sent, since nothing is named that they did not write", + "type": "string" + }, + "schemaLocation": { + "description": "Where that reference sits in the supplied schema, as a JSON Pointer. Absent alongside the reference it locates", + "x-format-assertion": true, + "type": "string", + "format": "json-pointer" + } + }, + "additionalProperties": false, + "dependentRequired": { + "reference": [ "schemaLocation" ], + "schemaLocation": [ "reference" ] + } + }, + { + "const": { + "type": "urn:sourcemeta:one:schema-too-complex", + "title": "Unprocessable Content", + "status": 422, + "detail": "The supplied schema is too complex to compile on demand, so try a simpler one or add it to the catalog, where no such limit applies" + } + }, { "const": { "type": "urn:sourcemeta:one:cannot-satisfy-content-encoding", diff --git a/src/self/v1/schemas/api/playground/schemas/trace/request.json b/src/self/v1/schemas/api/playground/schemas/trace/request.json new file mode 100644 index 000000000..1f4eeed10 --- /dev/null +++ b/src/self/v1/schemas/api/playground/schemas/trace/request.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Sourcemeta One Playground Schema Trace API Request", + "description": "A JSON instance and the schema to trace its evaluation against", + "examples": [ + { + "instance": "hello world", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "string" + } + } + ], + "type": "object", + "required": [ "instance", "schema" ], + "properties": { + "instance": { + "description": "The JSON instance to trace evaluation for" + }, + "schema": { + "description": "The JSON Schema to evaluate the instance against", + "x-lint-exclude": [ "simple_properties_identifiers" ], + "type": "object", + "required": [ "$schema" ], + "properties": { + "$schema": { + "description": "The dialect the schema is written against", + "x-format-assertion": true, + "type": "string", + "format": "uri" + } + } + } + }, + "additionalProperties": false +} diff --git a/src/self/v1/schemas/api/playground/schemas/trace/response.json b/src/self/v1/schemas/api/playground/schemas/trace/response.json new file mode 100644 index 000000000..92104e4c2 --- /dev/null +++ b/src/self/v1/schemas/api/playground/schemas/trace/response.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Sourcemeta One Playground Schema Trace API Response", + "description": "The response format for tracing evaluation against a schema supplied in the request, which is what tracing against a schema in the catalog returns", + "examples": [ + { + "valid": true, + "steps": [] + } + ], + "$ref": "../../../schemas/trace/response.json" +} diff --git a/src/self/v1/schemas/api/schemas/trace/response.json b/src/self/v1/schemas/api/schemas/trace/response.json index 504a37787..7b41a49e3 100644 --- a/src/self/v1/schemas/api/schemas/trace/response.json +++ b/src/self/v1/schemas/api/schemas/trace/response.json @@ -51,9 +51,10 @@ } }, "keywordLocation": { + "description": "Relative where the schema carries no identity of its own, which is what a schema supplied in the request itself normally looks like", "x-format-assertion": true, "type": "string", - "format": "uri" + "format": "uri-reference" }, "message": { "type": [ "string", "null" ] diff --git a/test/cli/index/common/output-verbose-long.clitest b/test/cli/index/common/output-verbose-long.clitest index bd8590264..6b86c0dfd 100644 --- a/test/cli/index/common/output-verbose-long.clitest +++ b/test/cli/index/common/output-verbose-long.clitest @@ -32,66 +32,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> ( 1%) Resolving: example/schemas/foo.json 2> https://example.com/foo => https://sourcemeta.com/example/schemas/foo 2> ( 3%) Resolving: self/v1/schemas/api/auth/login/response.json @@ -100,107 +102,111 @@ WRITE expected.txt UNTIL EOF 2> https://sourcemeta.com/api/error => https://sourcemeta.com/self/v1/schemas/api/error 2> ( 6%) Resolving: self/v1/schemas/api/list/response.json 2> https://sourcemeta.com/api/list/response => https://sourcemeta.com/self/v1/schemas/api/list/response -2> ( 7%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json +2> ( 7%) Resolving: self/v1/schemas/api/playground/schemas/trace/request.json +2> https://sourcemeta.com/api/playground/schemas/trace/request => https://sourcemeta.com/self/v1/schemas/api/playground/schemas/trace/request +2> ( 9%) Resolving: self/v1/schemas/api/playground/schemas/trace/response.json +2> https://sourcemeta.com/api/playground/schemas/trace/response => https://sourcemeta.com/self/v1/schemas/api/playground/schemas/trace/response +2> ( 10%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json 2> https://sourcemeta.com/api/schemas/dependencies/response => https://sourcemeta.com/self/v1/schemas/api/schemas/dependencies/response -2> ( 9%) Resolving: self/v1/schemas/api/schemas/dependents/response.json +2> ( 12%) Resolving: self/v1/schemas/api/schemas/dependents/response.json 2> https://sourcemeta.com/api/schemas/dependents/response => https://sourcemeta.com/self/v1/schemas/api/schemas/dependents/response -2> ( 10%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json +2> ( 13%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json 2> https://sourcemeta.com/api/schemas/evaluate/request => https://sourcemeta.com/self/v1/schemas/api/schemas/evaluate/request -2> ( 12%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json +2> ( 15%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json 2> https://sourcemeta.com/api/schemas/evaluate/response => https://sourcemeta.com/self/v1/schemas/api/schemas/evaluate/response -2> ( 14%) Resolving: self/v1/schemas/api/schemas/health/response.json +2> ( 16%) Resolving: self/v1/schemas/api/schemas/health/response.json 2> https://sourcemeta.com/api/schemas/health/response => https://sourcemeta.com/self/v1/schemas/api/schemas/health/response -2> ( 15%) Resolving: self/v1/schemas/api/schemas/locations/response.json +2> ( 18%) Resolving: self/v1/schemas/api/schemas/locations/response.json 2> https://sourcemeta.com/api/schemas/locations/response => https://sourcemeta.com/self/v1/schemas/api/schemas/locations/response -2> ( 17%) Resolving: self/v1/schemas/api/schemas/metadata/response.json +2> ( 19%) Resolving: self/v1/schemas/api/schemas/metadata/response.json 2> https://sourcemeta.com/api/schemas/metadata/response => https://sourcemeta.com/self/v1/schemas/api/schemas/metadata/response -2> ( 18%) Resolving: self/v1/schemas/api/schemas/output-error.json +2> ( 21%) Resolving: self/v1/schemas/api/schemas/output-error.json 2> https://sourcemeta.com/api/schemas/output-error => https://sourcemeta.com/self/v1/schemas/api/schemas/output-error -2> ( 20%) Resolving: self/v1/schemas/api/schemas/position.json +2> ( 22%) Resolving: self/v1/schemas/api/schemas/position.json 2> https://sourcemeta.com/api/schemas/position => https://sourcemeta.com/self/v1/schemas/api/schemas/position -2> ( 21%) Resolving: self/v1/schemas/api/schemas/positions/response.json +2> ( 24%) Resolving: self/v1/schemas/api/schemas/positions/response.json 2> https://sourcemeta.com/api/schemas/positions/response => https://sourcemeta.com/self/v1/schemas/api/schemas/positions/response -2> ( 23%) Resolving: self/v1/schemas/api/schemas/rdf/request.json +2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/request.json 2> https://sourcemeta.com/api/schemas/rdf/request => https://sourcemeta.com/self/v1/schemas/api/schemas/rdf/request -2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/response.json +2> ( 27%) Resolving: self/v1/schemas/api/schemas/rdf/response.json 2> https://sourcemeta.com/api/schemas/rdf/response => https://sourcemeta.com/self/v1/schemas/api/schemas/rdf/response -2> ( 26%) Resolving: self/v1/schemas/api/schemas/search/response.json +2> ( 28%) Resolving: self/v1/schemas/api/schemas/search/response.json 2> https://sourcemeta.com/api/schemas/search/response => https://sourcemeta.com/self/v1/schemas/api/schemas/search/response -2> ( 28%) Resolving: self/v1/schemas/api/schemas/stats/response.json +2> ( 30%) Resolving: self/v1/schemas/api/schemas/stats/response.json 2> https://sourcemeta.com/api/schemas/stats/response => https://sourcemeta.com/self/v1/schemas/api/schemas/stats/response -2> ( 29%) Resolving: self/v1/schemas/api/schemas/trace/request.json +2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/request.json 2> https://sourcemeta.com/api/schemas/trace/request => https://sourcemeta.com/self/v1/schemas/api/schemas/trace/request -2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/response.json +2> ( 33%) Resolving: self/v1/schemas/api/schemas/trace/response.json 2> https://sourcemeta.com/api/schemas/trace/response => https://sourcemeta.com/self/v1/schemas/api/schemas/trace/response -2> ( 32%) Resolving: self/v1/schemas/mcp/error.json +2> ( 34%) Resolving: self/v1/schemas/mcp/error.json 2> https://sourcemeta.com/mcp/error => https://sourcemeta.com/self/v1/schemas/mcp/error -2> ( 34%) Resolving: self/v1/schemas/mcp/initialize/request.json +2> ( 36%) Resolving: self/v1/schemas/mcp/initialize/request.json 2> https://sourcemeta.com/mcp/initialize/request => https://sourcemeta.com/self/v1/schemas/mcp/initialize/request -2> ( 35%) Resolving: self/v1/schemas/mcp/initialize/response.json +2> ( 37%) Resolving: self/v1/schemas/mcp/initialize/response.json 2> https://sourcemeta.com/mcp/initialize/response => https://sourcemeta.com/self/v1/schemas/mcp/initialize/response -2> ( 37%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json +2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json 2> https://sourcemeta.com/mcp/notifications/cancelled => https://sourcemeta.com/self/v1/schemas/mcp/notifications/cancelled -2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/initialized.json +2> ( 40%) Resolving: self/v1/schemas/mcp/notifications/initialized.json 2> https://sourcemeta.com/mcp/notifications/initialized => https://sourcemeta.com/self/v1/schemas/mcp/notifications/initialized -2> ( 40%) Resolving: self/v1/schemas/mcp/ping/request.json +2> ( 42%) Resolving: self/v1/schemas/mcp/ping/request.json 2> https://sourcemeta.com/mcp/ping/request => https://sourcemeta.com/self/v1/schemas/mcp/ping/request -2> ( 42%) Resolving: self/v1/schemas/mcp/ping/response.json +2> ( 43%) Resolving: self/v1/schemas/mcp/ping/response.json 2> https://sourcemeta.com/mcp/ping/response => https://sourcemeta.com/self/v1/schemas/mcp/ping/response -2> ( 43%) Resolving: self/v1/schemas/mcp/prm/response.json +2> ( 45%) Resolving: self/v1/schemas/mcp/prm/response.json 2> https://sourcemeta.com/mcp/prm/response => https://sourcemeta.com/self/v1/schemas/mcp/prm/response -2> ( 45%) Resolving: self/v1/schemas/mcp/request.json +2> ( 46%) Resolving: self/v1/schemas/mcp/request.json 2> https://sourcemeta.com/mcp/request => https://sourcemeta.com/self/v1/schemas/mcp/request -2> ( 46%) Resolving: self/v1/schemas/mcp/resources/list/request.json +2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/request.json 2> https://sourcemeta.com/mcp/resources/list/request => https://sourcemeta.com/self/v1/schemas/mcp/resources/list/request -2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/response.json +2> ( 50%) Resolving: self/v1/schemas/mcp/resources/list/response.json 2> https://sourcemeta.com/mcp/resources/list/response => https://sourcemeta.com/self/v1/schemas/mcp/resources/list/response -2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/request.json +2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/request.json 2> https://sourcemeta.com/mcp/resources/read/request => https://sourcemeta.com/self/v1/schemas/mcp/resources/read/request -2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/response.json +2> ( 53%) Resolving: self/v1/schemas/mcp/resources/read/response.json 2> https://sourcemeta.com/mcp/resources/read/response => https://sourcemeta.com/self/v1/schemas/mcp/resources/read/response -2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json +2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json 2> https://sourcemeta.com/mcp/resources/templates/list/request => https://sourcemeta.com/self/v1/schemas/mcp/resources/templates/list/request -2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json +2> ( 56%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json 2> https://sourcemeta.com/mcp/resources/templates/list/response => https://sourcemeta.com/self/v1/schemas/mcp/resources/templates/list/response -2> ( 56%) Resolving: self/v1/schemas/mcp/response.json +2> ( 57%) Resolving: self/v1/schemas/mcp/response.json 2> https://sourcemeta.com/mcp/response => https://sourcemeta.com/self/v1/schemas/mcp/response -2> ( 57%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json +2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json 2> https://sourcemeta.com/mcp/tools/call/evaluate-schema/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/evaluate-schema/request -2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json +2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json 2> https://sourcemeta.com/mcp/tools/call/evaluate-schema/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/evaluate-schema/response -2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json +2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-dependencies/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request -2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json +2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-dependencies/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response -2> ( 64%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json +2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-dependents/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-dependents/request -2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json +2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-dependents/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-dependents/response -2> ( 67%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json +2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-health/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-health/request -2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json +2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-health/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-health/response -2> ( 70%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json +2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-locations/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-locations/request -2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json +2> ( 72%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-locations/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-locations/response -2> ( 73%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json +2> ( 74%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-metadata/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-metadata/request 2> ( 75%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-metadata/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-metadata/response -2> ( 76%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json +2> ( 77%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-positions/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-positions/request 2> ( 78%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-positions/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-positions/response -2> ( 79%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json +2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-stats/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-stats/request 2> ( 81%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-stats/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-stats/response -2> ( 82%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json +2> ( 83%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json 2> https://sourcemeta.com/mcp/tools/call/instance-to-rdf/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/instance-to-rdf/request 2> ( 84%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json 2> https://sourcemeta.com/mcp/tools/call/instance-to-rdf/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/instance-to-rdf/response -2> ( 85%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json +2> ( 86%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json 2> https://sourcemeta.com/mcp/tools/call/list-directory/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/list-directory/request 2> ( 87%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/response.json 2> https://sourcemeta.com/mcp/tools/call/list-directory/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/list-directory/response @@ -228,15 +234,17 @@ WRITE expected.txt UNTIL EOF 2> ( 0%) Producing: explorer/public/%/login.metapack 2> ( 0%) Producing: schemas/example/schemas/foo/%/schema.metapack 2> ( 0%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack +2> ( 0%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/position/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/schema.metapack @@ -245,7 +253,7 @@ WRITE expected.txt UNTIL EOF 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/schema.metapack @@ -280,7 +288,7 @@ WRITE expected.txt UNTIL EOF 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack -2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack +2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/schema.metapack @@ -289,7 +297,7 @@ WRITE expected.txt UNTIL EOF 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/schema.metapack -2> ( 8%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack +2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack 2> ( 8%) Producing: explorer/public/%/login-html.metapack 2> ( 8%) Producing: schemas/example/schemas/foo/%/dependencies.metapack 2> ( 8%) Producing: schemas/example/schemas/foo/%/locations.metapack @@ -298,7 +306,7 @@ WRITE expected.txt UNTIL EOF 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/dependencies.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/locations.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/positions.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack +2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/dependencies.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/positions.metapack @@ -307,136 +315,144 @@ WRITE expected.txt UNTIL EOF 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/positions.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/positions.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/stats.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/stats.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/dependencies.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/dependencies.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/locations.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/positions.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependencies.metapack @@ -444,8 +460,8 @@ WRITE expected.txt UNTIL EOF 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/locations.metapack @@ -453,8 +469,8 @@ WRITE expected.txt UNTIL EOF 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/positions.metapack @@ -462,7 +478,7 @@ WRITE expected.txt UNTIL EOF 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/positions.metapack @@ -471,7 +487,7 @@ WRITE expected.txt UNTIL EOF 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/positions.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/stats.metapack @@ -480,7 +496,7 @@ WRITE expected.txt UNTIL EOF 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/stats.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack -2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack +2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependencies.metapack @@ -489,7 +505,7 @@ WRITE expected.txt UNTIL EOF 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependencies.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack -2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack +2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependencies.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/locations.metapack @@ -524,7 +540,7 @@ WRITE expected.txt UNTIL EOF 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/positions.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/stats.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependencies.metapack -2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack +2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/positions.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/dependencies.metapack @@ -533,7 +549,7 @@ WRITE expected.txt UNTIL EOF 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/dependencies.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/locations.metapack -2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack +2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/locations.metapack @@ -542,7 +558,7 @@ WRITE expected.txt UNTIL EOF 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack -2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack +2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/dependencies.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/locations.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/positions.metapack @@ -550,15 +566,19 @@ WRITE expected.txt UNTIL EOF 2> ( 37%) Producing: schemas/example/schemas/foo/%/bundle.metapack 2> ( 37%) Producing: schemas/example/schemas/foo/%/health.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/bundle.metapack @@ -566,8 +586,8 @@ WRITE expected.txt UNTIL EOF 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/health.metapack @@ -575,8 +595,8 @@ WRITE expected.txt UNTIL EOF 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/bundle.metapack @@ -584,7 +604,7 @@ WRITE expected.txt UNTIL EOF 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/error/%/bundle.metapack @@ -593,7 +613,7 @@ WRITE expected.txt UNTIL EOF 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/health.metapack @@ -602,7 +622,7 @@ WRITE expected.txt UNTIL EOF 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack -2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack +2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/bundle.metapack @@ -646,7 +666,7 @@ WRITE expected.txt UNTIL EOF 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack -2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack +2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/bundle.metapack @@ -655,7 +675,7 @@ WRITE expected.txt UNTIL EOF 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack -2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack +2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/health.metapack @@ -664,7 +684,7 @@ WRITE expected.txt UNTIL EOF 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack -2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack +2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/bundle.metapack @@ -672,13 +692,15 @@ WRITE expected.txt UNTIL EOF 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/health.metapack 2> ( 52%) Producing: explorer/public/example/schemas/foo/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/error/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack @@ -707,7 +729,7 @@ WRITE expected.txt UNTIL EOF 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack -2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack +2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema.metapack @@ -716,7 +738,7 @@ WRITE expected.txt UNTIL EOF 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema.metapack @@ -725,7 +747,7 @@ WRITE expected.txt UNTIL EOF 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack @@ -733,8 +755,8 @@ WRITE expected.txt UNTIL EOF 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema.metapack @@ -742,8 +764,8 @@ WRITE expected.txt UNTIL EOF 2> ( 59%) Producing: schemas/example/schemas/foo/%/blaze-exhaustive.metapack 2> ( 59%) Producing: schemas/example/schemas/foo/%/blaze-fast.metapack 2> ( 59%) Producing: schemas/example/schemas/foo/%/editor.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-fast.metapack @@ -751,49 +773,55 @@ WRITE expected.txt UNTIL EOF 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-exhaustive.metapack @@ -801,8 +829,8 @@ WRITE expected.txt UNTIL EOF 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/blaze-exhaustive.metapack @@ -810,8 +838,8 @@ WRITE expected.txt UNTIL EOF 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/blaze-exhaustive.metapack @@ -819,7 +847,7 @@ WRITE expected.txt UNTIL EOF 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack -2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack +2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/editor.metapack @@ -828,7 +856,7 @@ WRITE expected.txt UNTIL EOF 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack -2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack +2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-fast.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/editor.metapack @@ -837,7 +865,7 @@ WRITE expected.txt UNTIL EOF 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-fast.metapack -2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack +2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-fast.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/editor.metapack @@ -846,7 +874,7 @@ WRITE expected.txt UNTIL EOF 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-fast.metapack -2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack +2> ( 72%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-exhaustive.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-fast.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/editor.metapack @@ -881,7 +909,7 @@ WRITE expected.txt UNTIL EOF 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/editor.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack -2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack +2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-fast.metapack @@ -890,7 +918,7 @@ WRITE expected.txt UNTIL EOF 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack -2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack +2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-fast.metapack @@ -899,7 +927,7 @@ WRITE expected.txt UNTIL EOF 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-fast.metapack @@ -908,7 +936,7 @@ WRITE expected.txt UNTIL EOF 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-fast.metapack @@ -916,8 +944,8 @@ WRITE expected.txt UNTIL EOF 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-fast.metapack @@ -925,8 +953,8 @@ WRITE expected.txt UNTIL EOF 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-fast.metapack @@ -934,10 +962,13 @@ WRITE expected.txt UNTIL EOF 2> ( 81%) Producing: explorer/public/example/schemas/%/directory.metapack 2> ( 81%) Producing: explorer/public/example/schemas/foo/%/schema-html.metapack 2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory.metapack @@ -977,7 +1008,7 @@ WRITE expected.txt UNTIL EOF 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack -2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack +2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema-html.metapack @@ -986,7 +1017,7 @@ WRITE expected.txt UNTIL EOF 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/schema-html.metapack @@ -995,7 +1026,7 @@ WRITE expected.txt UNTIL EOF 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema-html.metapack @@ -1003,8 +1034,8 @@ WRITE expected.txt UNTIL EOF 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema-html.metapack @@ -1012,8 +1043,8 @@ WRITE expected.txt UNTIL EOF 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema-html.metapack @@ -1021,8 +1052,8 @@ WRITE expected.txt UNTIL EOF 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema-html.metapack @@ -1030,15 +1061,17 @@ WRITE expected.txt UNTIL EOF 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/example/%/directory.metapack -2> ( 93%) Producing: explorer/public/example/schemas/%/directory-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack +2> ( 92%) Producing: explorer/public/example/schemas/%/directory-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/list/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/positions/%/directory-html.metapack @@ -1047,7 +1080,7 @@ WRITE expected.txt UNTIL EOF 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/ping/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory-html.metapack @@ -1056,7 +1089,7 @@ WRITE expected.txt UNTIL EOF 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory-html.metapack @@ -1064,24 +1097,27 @@ WRITE expected.txt UNTIL EOF 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/example/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 99%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/v1/%/directory.metapack 2> ( 99%) Producing: explorer/public/self/v1/schemas/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/%/directory.metapack @@ -1095,57 +1131,59 @@ WRITE expected.txt UNTIL EOF 2> ( 3%) Combining: explorer/public/self/v1/schemas/api/auth/login/response/%/dependents.metapack 2> ( 4%) Combining: explorer/public/self/v1/schemas/api/error/%/dependents.metapack 2> ( 6%) Combining: explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack -2> ( 7%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack -2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack -2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack -2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack -2> ( 14%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack -2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack -2> ( 17%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack -2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack -2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack -2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack -2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack -2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack -2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack -2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack -2> ( 29%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack -2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack -2> ( 32%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack -2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack -2> ( 35%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack -2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack -2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack -2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack -2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack -2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack -2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack -2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack -2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack -2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack -2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack -2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack -2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack -2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack -2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack -2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack -2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack -2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack -2> ( 64%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack -2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack -2> ( 67%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack -2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack -2> ( 70%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack -2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack -2> ( 73%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack +2> ( 7%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +2> ( 9%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack +2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack +2> ( 13%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack +2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack +2> ( 16%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack +2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack +2> ( 19%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack +2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack +2> ( 22%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack +2> ( 24%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack +2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack +2> ( 27%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack +2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack +2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack +2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack +2> ( 33%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack +2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack +2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack +2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack +2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack +2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack +2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack +2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack +2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack +2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack +2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack +2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack +2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack +2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack +2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack +2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack +2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack +2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack +2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack +2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack +2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack +2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack +2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack +2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack +2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack +2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack +2> ( 72%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack +2> ( 74%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack 2> ( 75%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack -2> ( 76%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack +2> ( 77%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack 2> ( 78%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack -2> ( 79%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack +2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack 2> ( 81%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack -2> ( 82%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack +2> ( 83%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack 2> ( 84%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/dependents.metapack -2> ( 85%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack +2> ( 86%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack 2> ( 87%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/dependents.metapack 2> ( 89%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack 2> ( 90%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/response/%/dependents.metapack diff --git a/test/cli/index/common/output-verbose-short.clitest b/test/cli/index/common/output-verbose-short.clitest index 7e98eb2a5..a78fc49d9 100644 --- a/test/cli/index/common/output-verbose-short.clitest +++ b/test/cli/index/common/output-verbose-short.clitest @@ -32,66 +32,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> ( 1%) Resolving: example/schemas/foo.json 2> https://example.com/foo => https://sourcemeta.com/example/schemas/foo 2> ( 3%) Resolving: self/v1/schemas/api/auth/login/response.json @@ -100,107 +102,111 @@ WRITE expected.txt UNTIL EOF 2> https://sourcemeta.com/api/error => https://sourcemeta.com/self/v1/schemas/api/error 2> ( 6%) Resolving: self/v1/schemas/api/list/response.json 2> https://sourcemeta.com/api/list/response => https://sourcemeta.com/self/v1/schemas/api/list/response -2> ( 7%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json +2> ( 7%) Resolving: self/v1/schemas/api/playground/schemas/trace/request.json +2> https://sourcemeta.com/api/playground/schemas/trace/request => https://sourcemeta.com/self/v1/schemas/api/playground/schemas/trace/request +2> ( 9%) Resolving: self/v1/schemas/api/playground/schemas/trace/response.json +2> https://sourcemeta.com/api/playground/schemas/trace/response => https://sourcemeta.com/self/v1/schemas/api/playground/schemas/trace/response +2> ( 10%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json 2> https://sourcemeta.com/api/schemas/dependencies/response => https://sourcemeta.com/self/v1/schemas/api/schemas/dependencies/response -2> ( 9%) Resolving: self/v1/schemas/api/schemas/dependents/response.json +2> ( 12%) Resolving: self/v1/schemas/api/schemas/dependents/response.json 2> https://sourcemeta.com/api/schemas/dependents/response => https://sourcemeta.com/self/v1/schemas/api/schemas/dependents/response -2> ( 10%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json +2> ( 13%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json 2> https://sourcemeta.com/api/schemas/evaluate/request => https://sourcemeta.com/self/v1/schemas/api/schemas/evaluate/request -2> ( 12%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json +2> ( 15%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json 2> https://sourcemeta.com/api/schemas/evaluate/response => https://sourcemeta.com/self/v1/schemas/api/schemas/evaluate/response -2> ( 14%) Resolving: self/v1/schemas/api/schemas/health/response.json +2> ( 16%) Resolving: self/v1/schemas/api/schemas/health/response.json 2> https://sourcemeta.com/api/schemas/health/response => https://sourcemeta.com/self/v1/schemas/api/schemas/health/response -2> ( 15%) Resolving: self/v1/schemas/api/schemas/locations/response.json +2> ( 18%) Resolving: self/v1/schemas/api/schemas/locations/response.json 2> https://sourcemeta.com/api/schemas/locations/response => https://sourcemeta.com/self/v1/schemas/api/schemas/locations/response -2> ( 17%) Resolving: self/v1/schemas/api/schemas/metadata/response.json +2> ( 19%) Resolving: self/v1/schemas/api/schemas/metadata/response.json 2> https://sourcemeta.com/api/schemas/metadata/response => https://sourcemeta.com/self/v1/schemas/api/schemas/metadata/response -2> ( 18%) Resolving: self/v1/schemas/api/schemas/output-error.json +2> ( 21%) Resolving: self/v1/schemas/api/schemas/output-error.json 2> https://sourcemeta.com/api/schemas/output-error => https://sourcemeta.com/self/v1/schemas/api/schemas/output-error -2> ( 20%) Resolving: self/v1/schemas/api/schemas/position.json +2> ( 22%) Resolving: self/v1/schemas/api/schemas/position.json 2> https://sourcemeta.com/api/schemas/position => https://sourcemeta.com/self/v1/schemas/api/schemas/position -2> ( 21%) Resolving: self/v1/schemas/api/schemas/positions/response.json +2> ( 24%) Resolving: self/v1/schemas/api/schemas/positions/response.json 2> https://sourcemeta.com/api/schemas/positions/response => https://sourcemeta.com/self/v1/schemas/api/schemas/positions/response -2> ( 23%) Resolving: self/v1/schemas/api/schemas/rdf/request.json +2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/request.json 2> https://sourcemeta.com/api/schemas/rdf/request => https://sourcemeta.com/self/v1/schemas/api/schemas/rdf/request -2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/response.json +2> ( 27%) Resolving: self/v1/schemas/api/schemas/rdf/response.json 2> https://sourcemeta.com/api/schemas/rdf/response => https://sourcemeta.com/self/v1/schemas/api/schemas/rdf/response -2> ( 26%) Resolving: self/v1/schemas/api/schemas/search/response.json +2> ( 28%) Resolving: self/v1/schemas/api/schemas/search/response.json 2> https://sourcemeta.com/api/schemas/search/response => https://sourcemeta.com/self/v1/schemas/api/schemas/search/response -2> ( 28%) Resolving: self/v1/schemas/api/schemas/stats/response.json +2> ( 30%) Resolving: self/v1/schemas/api/schemas/stats/response.json 2> https://sourcemeta.com/api/schemas/stats/response => https://sourcemeta.com/self/v1/schemas/api/schemas/stats/response -2> ( 29%) Resolving: self/v1/schemas/api/schemas/trace/request.json +2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/request.json 2> https://sourcemeta.com/api/schemas/trace/request => https://sourcemeta.com/self/v1/schemas/api/schemas/trace/request -2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/response.json +2> ( 33%) Resolving: self/v1/schemas/api/schemas/trace/response.json 2> https://sourcemeta.com/api/schemas/trace/response => https://sourcemeta.com/self/v1/schemas/api/schemas/trace/response -2> ( 32%) Resolving: self/v1/schemas/mcp/error.json +2> ( 34%) Resolving: self/v1/schemas/mcp/error.json 2> https://sourcemeta.com/mcp/error => https://sourcemeta.com/self/v1/schemas/mcp/error -2> ( 34%) Resolving: self/v1/schemas/mcp/initialize/request.json +2> ( 36%) Resolving: self/v1/schemas/mcp/initialize/request.json 2> https://sourcemeta.com/mcp/initialize/request => https://sourcemeta.com/self/v1/schemas/mcp/initialize/request -2> ( 35%) Resolving: self/v1/schemas/mcp/initialize/response.json +2> ( 37%) Resolving: self/v1/schemas/mcp/initialize/response.json 2> https://sourcemeta.com/mcp/initialize/response => https://sourcemeta.com/self/v1/schemas/mcp/initialize/response -2> ( 37%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json +2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json 2> https://sourcemeta.com/mcp/notifications/cancelled => https://sourcemeta.com/self/v1/schemas/mcp/notifications/cancelled -2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/initialized.json +2> ( 40%) Resolving: self/v1/schemas/mcp/notifications/initialized.json 2> https://sourcemeta.com/mcp/notifications/initialized => https://sourcemeta.com/self/v1/schemas/mcp/notifications/initialized -2> ( 40%) Resolving: self/v1/schemas/mcp/ping/request.json +2> ( 42%) Resolving: self/v1/schemas/mcp/ping/request.json 2> https://sourcemeta.com/mcp/ping/request => https://sourcemeta.com/self/v1/schemas/mcp/ping/request -2> ( 42%) Resolving: self/v1/schemas/mcp/ping/response.json +2> ( 43%) Resolving: self/v1/schemas/mcp/ping/response.json 2> https://sourcemeta.com/mcp/ping/response => https://sourcemeta.com/self/v1/schemas/mcp/ping/response -2> ( 43%) Resolving: self/v1/schemas/mcp/prm/response.json +2> ( 45%) Resolving: self/v1/schemas/mcp/prm/response.json 2> https://sourcemeta.com/mcp/prm/response => https://sourcemeta.com/self/v1/schemas/mcp/prm/response -2> ( 45%) Resolving: self/v1/schemas/mcp/request.json +2> ( 46%) Resolving: self/v1/schemas/mcp/request.json 2> https://sourcemeta.com/mcp/request => https://sourcemeta.com/self/v1/schemas/mcp/request -2> ( 46%) Resolving: self/v1/schemas/mcp/resources/list/request.json +2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/request.json 2> https://sourcemeta.com/mcp/resources/list/request => https://sourcemeta.com/self/v1/schemas/mcp/resources/list/request -2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/response.json +2> ( 50%) Resolving: self/v1/schemas/mcp/resources/list/response.json 2> https://sourcemeta.com/mcp/resources/list/response => https://sourcemeta.com/self/v1/schemas/mcp/resources/list/response -2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/request.json +2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/request.json 2> https://sourcemeta.com/mcp/resources/read/request => https://sourcemeta.com/self/v1/schemas/mcp/resources/read/request -2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/response.json +2> ( 53%) Resolving: self/v1/schemas/mcp/resources/read/response.json 2> https://sourcemeta.com/mcp/resources/read/response => https://sourcemeta.com/self/v1/schemas/mcp/resources/read/response -2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json +2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json 2> https://sourcemeta.com/mcp/resources/templates/list/request => https://sourcemeta.com/self/v1/schemas/mcp/resources/templates/list/request -2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json +2> ( 56%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json 2> https://sourcemeta.com/mcp/resources/templates/list/response => https://sourcemeta.com/self/v1/schemas/mcp/resources/templates/list/response -2> ( 56%) Resolving: self/v1/schemas/mcp/response.json +2> ( 57%) Resolving: self/v1/schemas/mcp/response.json 2> https://sourcemeta.com/mcp/response => https://sourcemeta.com/self/v1/schemas/mcp/response -2> ( 57%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json +2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json 2> https://sourcemeta.com/mcp/tools/call/evaluate-schema/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/evaluate-schema/request -2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json +2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json 2> https://sourcemeta.com/mcp/tools/call/evaluate-schema/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/evaluate-schema/response -2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json +2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-dependencies/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request -2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json +2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-dependencies/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response -2> ( 64%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json +2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-dependents/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-dependents/request -2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json +2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-dependents/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-dependents/response -2> ( 67%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json +2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-health/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-health/request -2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json +2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-health/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-health/response -2> ( 70%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json +2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-locations/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-locations/request -2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json +2> ( 72%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-locations/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-locations/response -2> ( 73%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json +2> ( 74%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-metadata/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-metadata/request 2> ( 75%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-metadata/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-metadata/response -2> ( 76%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json +2> ( 77%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-positions/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-positions/request 2> ( 78%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-positions/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-positions/response -2> ( 79%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json +2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-stats/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-stats/request 2> ( 81%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json 2> https://sourcemeta.com/mcp/tools/call/get-schema-stats/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/get-schema-stats/response -2> ( 82%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json +2> ( 83%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json 2> https://sourcemeta.com/mcp/tools/call/instance-to-rdf/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/instance-to-rdf/request 2> ( 84%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json 2> https://sourcemeta.com/mcp/tools/call/instance-to-rdf/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/instance-to-rdf/response -2> ( 85%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json +2> ( 86%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json 2> https://sourcemeta.com/mcp/tools/call/list-directory/request => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/list-directory/request 2> ( 87%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/response.json 2> https://sourcemeta.com/mcp/tools/call/list-directory/response => https://sourcemeta.com/self/v1/schemas/mcp/tools/call/list-directory/response @@ -228,15 +234,17 @@ WRITE expected.txt UNTIL EOF 2> ( 0%) Producing: explorer/public/%/login.metapack 2> ( 0%) Producing: schemas/example/schemas/foo/%/schema.metapack 2> ( 0%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack +2> ( 0%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/position/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/schema.metapack @@ -245,7 +253,7 @@ WRITE expected.txt UNTIL EOF 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/schema.metapack @@ -280,7 +288,7 @@ WRITE expected.txt UNTIL EOF 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack -2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack +2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/schema.metapack @@ -289,7 +297,7 @@ WRITE expected.txt UNTIL EOF 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/schema.metapack -2> ( 8%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack +2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack 2> ( 8%) Producing: explorer/public/%/login-html.metapack 2> ( 8%) Producing: schemas/example/schemas/foo/%/dependencies.metapack 2> ( 8%) Producing: schemas/example/schemas/foo/%/locations.metapack @@ -298,7 +306,7 @@ WRITE expected.txt UNTIL EOF 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/dependencies.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/locations.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/positions.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack +2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/dependencies.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/positions.metapack @@ -307,136 +315,144 @@ WRITE expected.txt UNTIL EOF 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/positions.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/positions.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/stats.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/stats.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/dependencies.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/dependencies.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/locations.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/positions.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependencies.metapack @@ -444,8 +460,8 @@ WRITE expected.txt UNTIL EOF 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/locations.metapack @@ -453,8 +469,8 @@ WRITE expected.txt UNTIL EOF 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/positions.metapack @@ -462,7 +478,7 @@ WRITE expected.txt UNTIL EOF 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/positions.metapack @@ -471,7 +487,7 @@ WRITE expected.txt UNTIL EOF 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/positions.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/stats.metapack @@ -480,7 +496,7 @@ WRITE expected.txt UNTIL EOF 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/stats.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack -2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack +2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependencies.metapack @@ -489,7 +505,7 @@ WRITE expected.txt UNTIL EOF 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependencies.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack -2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack +2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependencies.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/locations.metapack @@ -524,7 +540,7 @@ WRITE expected.txt UNTIL EOF 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/positions.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/stats.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependencies.metapack -2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack +2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/positions.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/dependencies.metapack @@ -533,7 +549,7 @@ WRITE expected.txt UNTIL EOF 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/dependencies.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/locations.metapack -2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack +2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/locations.metapack @@ -542,7 +558,7 @@ WRITE expected.txt UNTIL EOF 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack -2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack +2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/dependencies.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/locations.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/positions.metapack @@ -550,15 +566,19 @@ WRITE expected.txt UNTIL EOF 2> ( 37%) Producing: schemas/example/schemas/foo/%/bundle.metapack 2> ( 37%) Producing: schemas/example/schemas/foo/%/health.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/bundle.metapack @@ -566,8 +586,8 @@ WRITE expected.txt UNTIL EOF 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/health.metapack @@ -575,8 +595,8 @@ WRITE expected.txt UNTIL EOF 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/bundle.metapack @@ -584,7 +604,7 @@ WRITE expected.txt UNTIL EOF 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/error/%/bundle.metapack @@ -593,7 +613,7 @@ WRITE expected.txt UNTIL EOF 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/health.metapack @@ -602,7 +622,7 @@ WRITE expected.txt UNTIL EOF 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack -2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack +2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/bundle.metapack @@ -646,7 +666,7 @@ WRITE expected.txt UNTIL EOF 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack -2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack +2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/bundle.metapack @@ -655,7 +675,7 @@ WRITE expected.txt UNTIL EOF 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack -2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack +2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/health.metapack @@ -664,7 +684,7 @@ WRITE expected.txt UNTIL EOF 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack -2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack +2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/bundle.metapack @@ -672,13 +692,15 @@ WRITE expected.txt UNTIL EOF 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/health.metapack 2> ( 52%) Producing: explorer/public/example/schemas/foo/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/error/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack @@ -707,7 +729,7 @@ WRITE expected.txt UNTIL EOF 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack -2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack +2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema.metapack @@ -716,7 +738,7 @@ WRITE expected.txt UNTIL EOF 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema.metapack @@ -725,7 +747,7 @@ WRITE expected.txt UNTIL EOF 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack @@ -733,8 +755,8 @@ WRITE expected.txt UNTIL EOF 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema.metapack @@ -742,8 +764,8 @@ WRITE expected.txt UNTIL EOF 2> ( 59%) Producing: schemas/example/schemas/foo/%/blaze-exhaustive.metapack 2> ( 59%) Producing: schemas/example/schemas/foo/%/blaze-fast.metapack 2> ( 59%) Producing: schemas/example/schemas/foo/%/editor.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-fast.metapack @@ -751,49 +773,55 @@ WRITE expected.txt UNTIL EOF 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-exhaustive.metapack @@ -801,8 +829,8 @@ WRITE expected.txt UNTIL EOF 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/blaze-exhaustive.metapack @@ -810,8 +838,8 @@ WRITE expected.txt UNTIL EOF 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/blaze-exhaustive.metapack @@ -819,7 +847,7 @@ WRITE expected.txt UNTIL EOF 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack -2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack +2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/editor.metapack @@ -828,7 +856,7 @@ WRITE expected.txt UNTIL EOF 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack -2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack +2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-fast.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/editor.metapack @@ -837,7 +865,7 @@ WRITE expected.txt UNTIL EOF 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-fast.metapack -2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack +2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-fast.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/editor.metapack @@ -846,7 +874,7 @@ WRITE expected.txt UNTIL EOF 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-fast.metapack -2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack +2> ( 72%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-exhaustive.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-fast.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/editor.metapack @@ -881,7 +909,7 @@ WRITE expected.txt UNTIL EOF 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/editor.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack -2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack +2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-fast.metapack @@ -890,7 +918,7 @@ WRITE expected.txt UNTIL EOF 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack -2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack +2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-fast.metapack @@ -899,7 +927,7 @@ WRITE expected.txt UNTIL EOF 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-fast.metapack @@ -908,7 +936,7 @@ WRITE expected.txt UNTIL EOF 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-fast.metapack @@ -916,8 +944,8 @@ WRITE expected.txt UNTIL EOF 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-fast.metapack @@ -925,8 +953,8 @@ WRITE expected.txt UNTIL EOF 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-fast.metapack @@ -934,10 +962,13 @@ WRITE expected.txt UNTIL EOF 2> ( 81%) Producing: explorer/public/example/schemas/%/directory.metapack 2> ( 81%) Producing: explorer/public/example/schemas/foo/%/schema-html.metapack 2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory.metapack @@ -977,7 +1008,7 @@ WRITE expected.txt UNTIL EOF 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack -2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack +2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema-html.metapack @@ -986,7 +1017,7 @@ WRITE expected.txt UNTIL EOF 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/schema-html.metapack @@ -995,7 +1026,7 @@ WRITE expected.txt UNTIL EOF 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema-html.metapack @@ -1003,8 +1034,8 @@ WRITE expected.txt UNTIL EOF 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema-html.metapack @@ -1012,8 +1043,8 @@ WRITE expected.txt UNTIL EOF 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema-html.metapack @@ -1021,8 +1052,8 @@ WRITE expected.txt UNTIL EOF 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema-html.metapack @@ -1030,15 +1061,17 @@ WRITE expected.txt UNTIL EOF 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/example/%/directory.metapack -2> ( 93%) Producing: explorer/public/example/schemas/%/directory-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack +2> ( 92%) Producing: explorer/public/example/schemas/%/directory-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/list/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/positions/%/directory-html.metapack @@ -1047,7 +1080,7 @@ WRITE expected.txt UNTIL EOF 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/ping/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory-html.metapack @@ -1056,7 +1089,7 @@ WRITE expected.txt UNTIL EOF 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory-html.metapack @@ -1064,24 +1097,27 @@ WRITE expected.txt UNTIL EOF 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/example/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 99%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/v1/%/directory.metapack 2> ( 99%) Producing: explorer/public/self/v1/schemas/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/%/directory.metapack @@ -1095,57 +1131,59 @@ WRITE expected.txt UNTIL EOF 2> ( 3%) Combining: explorer/public/self/v1/schemas/api/auth/login/response/%/dependents.metapack 2> ( 4%) Combining: explorer/public/self/v1/schemas/api/error/%/dependents.metapack 2> ( 6%) Combining: explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack -2> ( 7%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack -2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack -2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack -2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack -2> ( 14%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack -2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack -2> ( 17%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack -2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack -2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack -2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack -2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack -2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack -2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack -2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack -2> ( 29%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack -2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack -2> ( 32%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack -2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack -2> ( 35%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack -2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack -2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack -2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack -2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack -2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack -2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack -2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack -2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack -2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack -2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack -2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack -2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack -2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack -2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack -2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack -2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack -2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack -2> ( 64%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack -2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack -2> ( 67%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack -2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack -2> ( 70%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack -2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack -2> ( 73%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack +2> ( 7%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +2> ( 9%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack +2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack +2> ( 13%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack +2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack +2> ( 16%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack +2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack +2> ( 19%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack +2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack +2> ( 22%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack +2> ( 24%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack +2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack +2> ( 27%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack +2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack +2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack +2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack +2> ( 33%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack +2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack +2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack +2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack +2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack +2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack +2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack +2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack +2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack +2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack +2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack +2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack +2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack +2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack +2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack +2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack +2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack +2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack +2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack +2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack +2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack +2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack +2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack +2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack +2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack +2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack +2> ( 72%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack +2> ( 74%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack 2> ( 75%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack -2> ( 76%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack +2> ( 77%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack 2> ( 78%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack -2> ( 79%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack +2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack 2> ( 81%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack -2> ( 82%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack +2> ( 83%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack 2> ( 84%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/dependents.metapack -2> ( 85%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack +2> ( 86%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack 2> ( 87%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/dependents.metapack 2> ( 89%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack 2> ( 90%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/response/%/dependents.metapack diff --git a/test/cli/index/common/rebuild-cache-config-change.clitest b/test/cli/index/common/rebuild-cache-config-change.clitest index d496755cd..52fbda1d7 100644 --- a/test/cli/index/common/rebuild-cache-config-change.clitest +++ b/test/cli/index/common/rebuild-cache-config-change.clitest @@ -47,66 +47,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) EOF REPLACE $CWD WITH '[CWD]' IN output.txt REPLACE $ONE_PREFIX WITH '[PREFIX]' IN output.txt @@ -139,121 +141,125 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> ( 1%) Resolving: example/schemas/foo.json 2> ( 3%) Resolving: self/v1/schemas/api/auth/login/response.json 2> ( 4%) Resolving: self/v1/schemas/api/error.json 2> ( 6%) Resolving: self/v1/schemas/api/list/response.json -2> ( 7%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json -2> ( 9%) Resolving: self/v1/schemas/api/schemas/dependents/response.json -2> ( 10%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json -2> ( 12%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json -2> ( 14%) Resolving: self/v1/schemas/api/schemas/health/response.json -2> ( 15%) Resolving: self/v1/schemas/api/schemas/locations/response.json -2> ( 17%) Resolving: self/v1/schemas/api/schemas/metadata/response.json -2> ( 18%) Resolving: self/v1/schemas/api/schemas/output-error.json -2> ( 20%) Resolving: self/v1/schemas/api/schemas/position.json -2> ( 21%) Resolving: self/v1/schemas/api/schemas/positions/response.json -2> ( 23%) Resolving: self/v1/schemas/api/schemas/rdf/request.json -2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/response.json -2> ( 26%) Resolving: self/v1/schemas/api/schemas/search/response.json -2> ( 28%) Resolving: self/v1/schemas/api/schemas/stats/response.json -2> ( 29%) Resolving: self/v1/schemas/api/schemas/trace/request.json -2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/response.json -2> ( 32%) Resolving: self/v1/schemas/mcp/error.json -2> ( 34%) Resolving: self/v1/schemas/mcp/initialize/request.json -2> ( 35%) Resolving: self/v1/schemas/mcp/initialize/response.json -2> ( 37%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json -2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/initialized.json -2> ( 40%) Resolving: self/v1/schemas/mcp/ping/request.json -2> ( 42%) Resolving: self/v1/schemas/mcp/ping/response.json -2> ( 43%) Resolving: self/v1/schemas/mcp/prm/response.json -2> ( 45%) Resolving: self/v1/schemas/mcp/request.json -2> ( 46%) Resolving: self/v1/schemas/mcp/resources/list/request.json -2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/response.json -2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/request.json -2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/response.json -2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json -2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json -2> ( 56%) Resolving: self/v1/schemas/mcp/response.json -2> ( 57%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json -2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json -2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json -2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json -2> ( 64%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json -2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json -2> ( 67%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json -2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json -2> ( 70%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json -2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json -2> ( 73%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json +2> ( 7%) Resolving: self/v1/schemas/api/playground/schemas/trace/request.json +2> ( 9%) Resolving: self/v1/schemas/api/playground/schemas/trace/response.json +2> ( 10%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json +2> ( 12%) Resolving: self/v1/schemas/api/schemas/dependents/response.json +2> ( 13%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json +2> ( 15%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json +2> ( 16%) Resolving: self/v1/schemas/api/schemas/health/response.json +2> ( 18%) Resolving: self/v1/schemas/api/schemas/locations/response.json +2> ( 19%) Resolving: self/v1/schemas/api/schemas/metadata/response.json +2> ( 21%) Resolving: self/v1/schemas/api/schemas/output-error.json +2> ( 22%) Resolving: self/v1/schemas/api/schemas/position.json +2> ( 24%) Resolving: self/v1/schemas/api/schemas/positions/response.json +2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/request.json +2> ( 27%) Resolving: self/v1/schemas/api/schemas/rdf/response.json +2> ( 28%) Resolving: self/v1/schemas/api/schemas/search/response.json +2> ( 30%) Resolving: self/v1/schemas/api/schemas/stats/response.json +2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/request.json +2> ( 33%) Resolving: self/v1/schemas/api/schemas/trace/response.json +2> ( 34%) Resolving: self/v1/schemas/mcp/error.json +2> ( 36%) Resolving: self/v1/schemas/mcp/initialize/request.json +2> ( 37%) Resolving: self/v1/schemas/mcp/initialize/response.json +2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json +2> ( 40%) Resolving: self/v1/schemas/mcp/notifications/initialized.json +2> ( 42%) Resolving: self/v1/schemas/mcp/ping/request.json +2> ( 43%) Resolving: self/v1/schemas/mcp/ping/response.json +2> ( 45%) Resolving: self/v1/schemas/mcp/prm/response.json +2> ( 46%) Resolving: self/v1/schemas/mcp/request.json +2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/request.json +2> ( 50%) Resolving: self/v1/schemas/mcp/resources/list/response.json +2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/request.json +2> ( 53%) Resolving: self/v1/schemas/mcp/resources/read/response.json +2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json +2> ( 56%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json +2> ( 57%) Resolving: self/v1/schemas/mcp/response.json +2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json +2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json +2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json +2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json +2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json +2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json +2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json +2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json +2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json +2> ( 72%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json +2> ( 74%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json 2> ( 75%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json -2> ( 76%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json +2> ( 77%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json 2> ( 78%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json -2> ( 79%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json +2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json 2> ( 81%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json -2> ( 82%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json +2> ( 83%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json 2> ( 84%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json -2> ( 85%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json +2> ( 86%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json 2> ( 87%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/response.json 2> ( 89%) Resolving: self/v1/schemas/mcp/tools/call/request.json 2> ( 90%) Resolving: self/v1/schemas/mcp/tools/call/response.json @@ -271,15 +277,17 @@ WRITE expected.txt UNTIL EOF 2> ( 0%) Producing: explorer/public/%/login.metapack 2> ( 0%) Producing: schemas/example/schemas/foo/%/schema.metapack 2> ( 0%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack +2> ( 0%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/position/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/schema.metapack @@ -288,7 +296,7 @@ WRITE expected.txt UNTIL EOF 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/schema.metapack @@ -323,7 +331,7 @@ WRITE expected.txt UNTIL EOF 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack -2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack +2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/schema.metapack @@ -332,7 +340,7 @@ WRITE expected.txt UNTIL EOF 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/schema.metapack -2> ( 8%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack +2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack 2> ( 8%) Producing: explorer/public/%/login-html.metapack 2> ( 8%) Producing: schemas/example/schemas/foo/%/dependencies.metapack 2> ( 8%) Producing: schemas/example/schemas/foo/%/locations.metapack @@ -341,7 +349,7 @@ WRITE expected.txt UNTIL EOF 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/dependencies.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/locations.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/positions.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack +2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/dependencies.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/positions.metapack @@ -350,136 +358,144 @@ WRITE expected.txt UNTIL EOF 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/positions.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/positions.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/stats.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/stats.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/dependencies.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/dependencies.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/locations.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/positions.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependencies.metapack @@ -487,8 +503,8 @@ WRITE expected.txt UNTIL EOF 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/locations.metapack @@ -496,8 +512,8 @@ WRITE expected.txt UNTIL EOF 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/positions.metapack @@ -505,7 +521,7 @@ WRITE expected.txt UNTIL EOF 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/positions.metapack @@ -514,7 +530,7 @@ WRITE expected.txt UNTIL EOF 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/positions.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/stats.metapack @@ -523,7 +539,7 @@ WRITE expected.txt UNTIL EOF 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/stats.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack -2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack +2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependencies.metapack @@ -532,7 +548,7 @@ WRITE expected.txt UNTIL EOF 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependencies.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack -2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack +2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependencies.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/locations.metapack @@ -567,7 +583,7 @@ WRITE expected.txt UNTIL EOF 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/positions.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/stats.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependencies.metapack -2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack +2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/positions.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/dependencies.metapack @@ -576,7 +592,7 @@ WRITE expected.txt UNTIL EOF 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/dependencies.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/locations.metapack -2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack +2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/locations.metapack @@ -585,7 +601,7 @@ WRITE expected.txt UNTIL EOF 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack -2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack +2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/dependencies.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/locations.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/positions.metapack @@ -593,15 +609,19 @@ WRITE expected.txt UNTIL EOF 2> ( 37%) Producing: schemas/example/schemas/foo/%/bundle.metapack 2> ( 37%) Producing: schemas/example/schemas/foo/%/health.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/bundle.metapack @@ -609,8 +629,8 @@ WRITE expected.txt UNTIL EOF 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/health.metapack @@ -618,8 +638,8 @@ WRITE expected.txt UNTIL EOF 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/bundle.metapack @@ -627,7 +647,7 @@ WRITE expected.txt UNTIL EOF 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/error/%/bundle.metapack @@ -636,7 +656,7 @@ WRITE expected.txt UNTIL EOF 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/health.metapack @@ -645,7 +665,7 @@ WRITE expected.txt UNTIL EOF 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack -2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack +2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/bundle.metapack @@ -689,7 +709,7 @@ WRITE expected.txt UNTIL EOF 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack -2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack +2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/bundle.metapack @@ -698,7 +718,7 @@ WRITE expected.txt UNTIL EOF 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack -2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack +2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/health.metapack @@ -707,7 +727,7 @@ WRITE expected.txt UNTIL EOF 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack -2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack +2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/bundle.metapack @@ -715,13 +735,15 @@ WRITE expected.txt UNTIL EOF 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/health.metapack 2> ( 52%) Producing: explorer/public/example/schemas/foo/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/error/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack @@ -750,7 +772,7 @@ WRITE expected.txt UNTIL EOF 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack -2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack +2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema.metapack @@ -759,7 +781,7 @@ WRITE expected.txt UNTIL EOF 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema.metapack @@ -768,7 +790,7 @@ WRITE expected.txt UNTIL EOF 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack @@ -776,8 +798,8 @@ WRITE expected.txt UNTIL EOF 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema.metapack @@ -785,8 +807,8 @@ WRITE expected.txt UNTIL EOF 2> ( 59%) Producing: schemas/example/schemas/foo/%/blaze-exhaustive.metapack 2> ( 59%) Producing: schemas/example/schemas/foo/%/blaze-fast.metapack 2> ( 59%) Producing: schemas/example/schemas/foo/%/editor.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-fast.metapack @@ -794,49 +816,55 @@ WRITE expected.txt UNTIL EOF 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-exhaustive.metapack @@ -844,8 +872,8 @@ WRITE expected.txt UNTIL EOF 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/blaze-exhaustive.metapack @@ -853,8 +881,8 @@ WRITE expected.txt UNTIL EOF 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/blaze-exhaustive.metapack @@ -862,7 +890,7 @@ WRITE expected.txt UNTIL EOF 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack -2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack +2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/editor.metapack @@ -871,7 +899,7 @@ WRITE expected.txt UNTIL EOF 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack -2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack +2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-fast.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/editor.metapack @@ -880,7 +908,7 @@ WRITE expected.txt UNTIL EOF 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-fast.metapack -2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack +2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-fast.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/editor.metapack @@ -889,7 +917,7 @@ WRITE expected.txt UNTIL EOF 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-fast.metapack -2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack +2> ( 72%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-exhaustive.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-fast.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/editor.metapack @@ -924,7 +952,7 @@ WRITE expected.txt UNTIL EOF 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/editor.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack -2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack +2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-fast.metapack @@ -933,7 +961,7 @@ WRITE expected.txt UNTIL EOF 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack -2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack +2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-fast.metapack @@ -942,7 +970,7 @@ WRITE expected.txt UNTIL EOF 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-fast.metapack @@ -951,7 +979,7 @@ WRITE expected.txt UNTIL EOF 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-fast.metapack @@ -959,8 +987,8 @@ WRITE expected.txt UNTIL EOF 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-fast.metapack @@ -968,8 +996,8 @@ WRITE expected.txt UNTIL EOF 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-fast.metapack @@ -977,10 +1005,13 @@ WRITE expected.txt UNTIL EOF 2> ( 81%) Producing: explorer/public/example/schemas/%/directory.metapack 2> ( 81%) Producing: explorer/public/example/schemas/foo/%/schema-html.metapack 2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory.metapack @@ -1020,7 +1051,7 @@ WRITE expected.txt UNTIL EOF 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack -2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack +2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema-html.metapack @@ -1029,7 +1060,7 @@ WRITE expected.txt UNTIL EOF 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/schema-html.metapack @@ -1038,7 +1069,7 @@ WRITE expected.txt UNTIL EOF 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema-html.metapack @@ -1046,8 +1077,8 @@ WRITE expected.txt UNTIL EOF 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema-html.metapack @@ -1055,8 +1086,8 @@ WRITE expected.txt UNTIL EOF 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema-html.metapack @@ -1064,8 +1095,8 @@ WRITE expected.txt UNTIL EOF 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema-html.metapack @@ -1073,15 +1104,17 @@ WRITE expected.txt UNTIL EOF 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/example/%/directory.metapack -2> ( 93%) Producing: explorer/public/example/schemas/%/directory-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack +2> ( 92%) Producing: explorer/public/example/schemas/%/directory-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/list/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/positions/%/directory-html.metapack @@ -1090,7 +1123,7 @@ WRITE expected.txt UNTIL EOF 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/ping/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory-html.metapack @@ -1099,7 +1132,7 @@ WRITE expected.txt UNTIL EOF 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory-html.metapack @@ -1107,24 +1140,27 @@ WRITE expected.txt UNTIL EOF 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/example/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 99%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/v1/%/directory.metapack 2> ( 99%) Producing: explorer/public/self/v1/schemas/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/%/directory.metapack diff --git a/test/cli/index/common/rebuild-cache.clitest b/test/cli/index/common/rebuild-cache.clitest index a050abcaf..927037b25 100644 --- a/test/cli/index/common/rebuild-cache.clitest +++ b/test/cli/index/common/rebuild-cache.clitest @@ -32,121 +32,125 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> ( 1%) Resolving: example/schemas/foo.json 2> ( 3%) Resolving: self/v1/schemas/api/auth/login/response.json 2> ( 4%) Resolving: self/v1/schemas/api/error.json 2> ( 6%) Resolving: self/v1/schemas/api/list/response.json -2> ( 7%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json -2> ( 9%) Resolving: self/v1/schemas/api/schemas/dependents/response.json -2> ( 10%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json -2> ( 12%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json -2> ( 14%) Resolving: self/v1/schemas/api/schemas/health/response.json -2> ( 15%) Resolving: self/v1/schemas/api/schemas/locations/response.json -2> ( 17%) Resolving: self/v1/schemas/api/schemas/metadata/response.json -2> ( 18%) Resolving: self/v1/schemas/api/schemas/output-error.json -2> ( 20%) Resolving: self/v1/schemas/api/schemas/position.json -2> ( 21%) Resolving: self/v1/schemas/api/schemas/positions/response.json -2> ( 23%) Resolving: self/v1/schemas/api/schemas/rdf/request.json -2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/response.json -2> ( 26%) Resolving: self/v1/schemas/api/schemas/search/response.json -2> ( 28%) Resolving: self/v1/schemas/api/schemas/stats/response.json -2> ( 29%) Resolving: self/v1/schemas/api/schemas/trace/request.json -2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/response.json -2> ( 32%) Resolving: self/v1/schemas/mcp/error.json -2> ( 34%) Resolving: self/v1/schemas/mcp/initialize/request.json -2> ( 35%) Resolving: self/v1/schemas/mcp/initialize/response.json -2> ( 37%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json -2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/initialized.json -2> ( 40%) Resolving: self/v1/schemas/mcp/ping/request.json -2> ( 42%) Resolving: self/v1/schemas/mcp/ping/response.json -2> ( 43%) Resolving: self/v1/schemas/mcp/prm/response.json -2> ( 45%) Resolving: self/v1/schemas/mcp/request.json -2> ( 46%) Resolving: self/v1/schemas/mcp/resources/list/request.json -2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/response.json -2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/request.json -2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/response.json -2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json -2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json -2> ( 56%) Resolving: self/v1/schemas/mcp/response.json -2> ( 57%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json -2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json -2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json -2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json -2> ( 64%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json -2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json -2> ( 67%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json -2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json -2> ( 70%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json -2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json -2> ( 73%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json +2> ( 7%) Resolving: self/v1/schemas/api/playground/schemas/trace/request.json +2> ( 9%) Resolving: self/v1/schemas/api/playground/schemas/trace/response.json +2> ( 10%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json +2> ( 12%) Resolving: self/v1/schemas/api/schemas/dependents/response.json +2> ( 13%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json +2> ( 15%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json +2> ( 16%) Resolving: self/v1/schemas/api/schemas/health/response.json +2> ( 18%) Resolving: self/v1/schemas/api/schemas/locations/response.json +2> ( 19%) Resolving: self/v1/schemas/api/schemas/metadata/response.json +2> ( 21%) Resolving: self/v1/schemas/api/schemas/output-error.json +2> ( 22%) Resolving: self/v1/schemas/api/schemas/position.json +2> ( 24%) Resolving: self/v1/schemas/api/schemas/positions/response.json +2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/request.json +2> ( 27%) Resolving: self/v1/schemas/api/schemas/rdf/response.json +2> ( 28%) Resolving: self/v1/schemas/api/schemas/search/response.json +2> ( 30%) Resolving: self/v1/schemas/api/schemas/stats/response.json +2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/request.json +2> ( 33%) Resolving: self/v1/schemas/api/schemas/trace/response.json +2> ( 34%) Resolving: self/v1/schemas/mcp/error.json +2> ( 36%) Resolving: self/v1/schemas/mcp/initialize/request.json +2> ( 37%) Resolving: self/v1/schemas/mcp/initialize/response.json +2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json +2> ( 40%) Resolving: self/v1/schemas/mcp/notifications/initialized.json +2> ( 42%) Resolving: self/v1/schemas/mcp/ping/request.json +2> ( 43%) Resolving: self/v1/schemas/mcp/ping/response.json +2> ( 45%) Resolving: self/v1/schemas/mcp/prm/response.json +2> ( 46%) Resolving: self/v1/schemas/mcp/request.json +2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/request.json +2> ( 50%) Resolving: self/v1/schemas/mcp/resources/list/response.json +2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/request.json +2> ( 53%) Resolving: self/v1/schemas/mcp/resources/read/response.json +2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json +2> ( 56%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json +2> ( 57%) Resolving: self/v1/schemas/mcp/response.json +2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json +2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json +2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json +2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json +2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json +2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json +2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json +2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json +2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json +2> ( 72%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json +2> ( 74%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json 2> ( 75%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json -2> ( 76%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json +2> ( 77%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json 2> ( 78%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json -2> ( 79%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json +2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json 2> ( 81%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json -2> ( 82%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json +2> ( 83%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json 2> ( 84%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json -2> ( 85%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json +2> ( 86%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json 2> ( 87%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/response.json 2> ( 89%) Resolving: self/v1/schemas/mcp/tools/call/request.json 2> ( 90%) Resolving: self/v1/schemas/mcp/tools/call/response.json @@ -164,15 +168,17 @@ WRITE expected.txt UNTIL EOF 2> ( 0%) Producing: explorer/public/%/login.metapack 2> ( 0%) Producing: schemas/example/schemas/foo/%/schema.metapack 2> ( 0%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack +2> ( 0%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/position/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/schema.metapack @@ -181,7 +187,7 @@ WRITE expected.txt UNTIL EOF 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/schema.metapack @@ -216,7 +222,7 @@ WRITE expected.txt UNTIL EOF 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack -2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack +2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/schema.metapack @@ -225,7 +231,7 @@ WRITE expected.txt UNTIL EOF 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/schema.metapack -2> ( 8%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack +2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack 2> ( 8%) Producing: explorer/public/%/login-html.metapack 2> ( 8%) Producing: schemas/example/schemas/foo/%/dependencies.metapack 2> ( 8%) Producing: schemas/example/schemas/foo/%/locations.metapack @@ -234,7 +240,7 @@ WRITE expected.txt UNTIL EOF 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/dependencies.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/locations.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/positions.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack +2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/dependencies.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/positions.metapack @@ -243,136 +249,144 @@ WRITE expected.txt UNTIL EOF 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/positions.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/positions.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/stats.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/stats.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/dependencies.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/dependencies.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/locations.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/positions.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependencies.metapack @@ -380,8 +394,8 @@ WRITE expected.txt UNTIL EOF 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/locations.metapack @@ -389,8 +403,8 @@ WRITE expected.txt UNTIL EOF 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/positions.metapack @@ -398,7 +412,7 @@ WRITE expected.txt UNTIL EOF 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/positions.metapack @@ -407,7 +421,7 @@ WRITE expected.txt UNTIL EOF 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/positions.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/stats.metapack @@ -416,7 +430,7 @@ WRITE expected.txt UNTIL EOF 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/stats.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack -2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack +2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependencies.metapack @@ -425,7 +439,7 @@ WRITE expected.txt UNTIL EOF 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependencies.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack -2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack +2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependencies.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/locations.metapack @@ -460,7 +474,7 @@ WRITE expected.txt UNTIL EOF 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/positions.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/stats.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependencies.metapack -2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack +2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/positions.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/dependencies.metapack @@ -469,7 +483,7 @@ WRITE expected.txt UNTIL EOF 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/dependencies.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/locations.metapack -2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack +2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/locations.metapack @@ -478,7 +492,7 @@ WRITE expected.txt UNTIL EOF 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack -2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack +2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/dependencies.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/locations.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/positions.metapack @@ -486,15 +500,19 @@ WRITE expected.txt UNTIL EOF 2> ( 37%) Producing: schemas/example/schemas/foo/%/bundle.metapack 2> ( 37%) Producing: schemas/example/schemas/foo/%/health.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/bundle.metapack @@ -502,8 +520,8 @@ WRITE expected.txt UNTIL EOF 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/health.metapack @@ -511,8 +529,8 @@ WRITE expected.txt UNTIL EOF 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/bundle.metapack @@ -520,7 +538,7 @@ WRITE expected.txt UNTIL EOF 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/error/%/bundle.metapack @@ -529,7 +547,7 @@ WRITE expected.txt UNTIL EOF 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/health.metapack @@ -538,7 +556,7 @@ WRITE expected.txt UNTIL EOF 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack -2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack +2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/bundle.metapack @@ -582,7 +600,7 @@ WRITE expected.txt UNTIL EOF 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack -2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack +2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/bundle.metapack @@ -591,7 +609,7 @@ WRITE expected.txt UNTIL EOF 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack -2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack +2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/health.metapack @@ -600,7 +618,7 @@ WRITE expected.txt UNTIL EOF 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack -2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack +2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/bundle.metapack @@ -608,13 +626,15 @@ WRITE expected.txt UNTIL EOF 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/health.metapack 2> ( 52%) Producing: explorer/public/example/schemas/foo/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/error/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack @@ -643,7 +663,7 @@ WRITE expected.txt UNTIL EOF 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack -2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack +2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema.metapack @@ -652,7 +672,7 @@ WRITE expected.txt UNTIL EOF 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema.metapack @@ -661,7 +681,7 @@ WRITE expected.txt UNTIL EOF 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack @@ -669,8 +689,8 @@ WRITE expected.txt UNTIL EOF 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema.metapack @@ -678,8 +698,8 @@ WRITE expected.txt UNTIL EOF 2> ( 59%) Producing: schemas/example/schemas/foo/%/blaze-exhaustive.metapack 2> ( 59%) Producing: schemas/example/schemas/foo/%/blaze-fast.metapack 2> ( 59%) Producing: schemas/example/schemas/foo/%/editor.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-fast.metapack @@ -687,49 +707,55 @@ WRITE expected.txt UNTIL EOF 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-exhaustive.metapack @@ -737,8 +763,8 @@ WRITE expected.txt UNTIL EOF 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/blaze-exhaustive.metapack @@ -746,8 +772,8 @@ WRITE expected.txt UNTIL EOF 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/blaze-exhaustive.metapack @@ -755,7 +781,7 @@ WRITE expected.txt UNTIL EOF 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack -2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack +2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/editor.metapack @@ -764,7 +790,7 @@ WRITE expected.txt UNTIL EOF 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack -2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack +2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-fast.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/editor.metapack @@ -773,7 +799,7 @@ WRITE expected.txt UNTIL EOF 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-fast.metapack -2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack +2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-fast.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/editor.metapack @@ -782,7 +808,7 @@ WRITE expected.txt UNTIL EOF 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-fast.metapack -2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack +2> ( 72%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-exhaustive.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-fast.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/editor.metapack @@ -817,7 +843,7 @@ WRITE expected.txt UNTIL EOF 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/editor.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack -2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack +2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-fast.metapack @@ -826,7 +852,7 @@ WRITE expected.txt UNTIL EOF 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack -2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack +2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-fast.metapack @@ -835,7 +861,7 @@ WRITE expected.txt UNTIL EOF 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-fast.metapack @@ -844,7 +870,7 @@ WRITE expected.txt UNTIL EOF 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-fast.metapack @@ -852,8 +878,8 @@ WRITE expected.txt UNTIL EOF 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-fast.metapack @@ -861,8 +887,8 @@ WRITE expected.txt UNTIL EOF 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-fast.metapack @@ -870,10 +896,13 @@ WRITE expected.txt UNTIL EOF 2> ( 81%) Producing: explorer/public/example/schemas/%/directory.metapack 2> ( 81%) Producing: explorer/public/example/schemas/foo/%/schema-html.metapack 2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory.metapack @@ -913,7 +942,7 @@ WRITE expected.txt UNTIL EOF 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack -2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack +2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema-html.metapack @@ -922,7 +951,7 @@ WRITE expected.txt UNTIL EOF 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/schema-html.metapack @@ -931,7 +960,7 @@ WRITE expected.txt UNTIL EOF 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema-html.metapack @@ -939,8 +968,8 @@ WRITE expected.txt UNTIL EOF 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema-html.metapack @@ -948,8 +977,8 @@ WRITE expected.txt UNTIL EOF 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema-html.metapack @@ -957,8 +986,8 @@ WRITE expected.txt UNTIL EOF 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema-html.metapack @@ -966,15 +995,17 @@ WRITE expected.txt UNTIL EOF 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/example/%/directory.metapack -2> ( 93%) Producing: explorer/public/example/schemas/%/directory-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack +2> ( 92%) Producing: explorer/public/example/schemas/%/directory-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/list/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/positions/%/directory-html.metapack @@ -983,7 +1014,7 @@ WRITE expected.txt UNTIL EOF 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/ping/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory-html.metapack @@ -992,7 +1023,7 @@ WRITE expected.txt UNTIL EOF 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory-html.metapack @@ -1000,24 +1031,27 @@ WRITE expected.txt UNTIL EOF 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/example/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 99%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/v1/%/directory.metapack 2> ( 99%) Producing: explorer/public/self/v1/schemas/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/%/directory.metapack @@ -1031,57 +1065,59 @@ WRITE expected.txt UNTIL EOF 2> ( 3%) Combining: explorer/public/self/v1/schemas/api/auth/login/response/%/dependents.metapack 2> ( 4%) Combining: explorer/public/self/v1/schemas/api/error/%/dependents.metapack 2> ( 6%) Combining: explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack -2> ( 7%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack -2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack -2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack -2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack -2> ( 14%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack -2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack -2> ( 17%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack -2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack -2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack -2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack -2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack -2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack -2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack -2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack -2> ( 29%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack -2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack -2> ( 32%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack -2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack -2> ( 35%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack -2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack -2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack -2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack -2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack -2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack -2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack -2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack -2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack -2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack -2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack -2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack -2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack -2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack -2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack -2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack -2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack -2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack -2> ( 64%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack -2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack -2> ( 67%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack -2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack -2> ( 70%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack -2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack -2> ( 73%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack +2> ( 7%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +2> ( 9%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack +2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack +2> ( 13%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack +2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack +2> ( 16%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack +2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack +2> ( 19%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack +2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack +2> ( 22%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack +2> ( 24%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack +2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack +2> ( 27%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack +2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack +2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack +2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack +2> ( 33%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack +2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack +2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack +2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack +2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack +2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack +2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack +2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack +2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack +2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack +2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack +2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack +2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack +2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack +2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack +2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack +2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack +2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack +2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack +2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack +2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack +2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack +2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack +2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack +2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack +2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack +2> ( 72%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack +2> ( 74%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack 2> ( 75%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack -2> ( 76%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack +2> ( 77%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack 2> ( 78%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack -2> ( 79%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack +2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack 2> ( 81%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack -2> ( 82%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack +2> ( 83%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack 2> ( 84%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/dependents.metapack -2> ( 85%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack +2> ( 86%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack 2> ( 87%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/dependents.metapack 2> ( 89%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack 2> ( 90%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/response/%/dependents.metapack @@ -1107,66 +1143,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) EOF REPLACE $CWD WITH '[CWD]' IN output.txt REPLACE $ONE_PREFIX WITH '[PREFIX]' IN output.txt @@ -1189,66 +1227,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> (100%) Resolving: example/schemas/foo.json 2> ( 5%) Producing: schemas/example/schemas/foo/%/schema.metapack 2> ( 10%) Producing: schemas/example/schemas/foo/%/dependencies.metapack @@ -1287,66 +1327,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) EOF REPLACE $CWD WITH '[CWD]' IN output.txt REPLACE $ONE_PREFIX WITH '[PREFIX]' IN output.txt diff --git a/test/cli/index/common/rebuild-comment-removed.clitest b/test/cli/index/common/rebuild-comment-removed.clitest index 40d4e1f0b..3ac9dc9c1 100644 --- a/test/cli/index/common/rebuild-comment-removed.clitest +++ b/test/cli/index/common/rebuild-comment-removed.clitest @@ -15,122 +15,126 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#1) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#3) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#4) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#65) 2> ( 1%) Resolving: self/v1/schemas/api/auth/login/response.json 2> ( 3%) Resolving: self/v1/schemas/api/error.json 2> ( 4%) Resolving: self/v1/schemas/api/list/response.json -2> ( 6%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json -2> ( 7%) Resolving: self/v1/schemas/api/schemas/dependents/response.json -2> ( 9%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json -2> ( 11%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json -2> ( 12%) Resolving: self/v1/schemas/api/schemas/health/response.json -2> ( 14%) Resolving: self/v1/schemas/api/schemas/locations/response.json -2> ( 15%) Resolving: self/v1/schemas/api/schemas/metadata/response.json -2> ( 17%) Resolving: self/v1/schemas/api/schemas/output-error.json -2> ( 19%) Resolving: self/v1/schemas/api/schemas/position.json -2> ( 20%) Resolving: self/v1/schemas/api/schemas/positions/response.json -2> ( 22%) Resolving: self/v1/schemas/api/schemas/rdf/request.json -2> ( 23%) Resolving: self/v1/schemas/api/schemas/rdf/response.json -2> ( 25%) Resolving: self/v1/schemas/api/schemas/search/response.json -2> ( 26%) Resolving: self/v1/schemas/api/schemas/stats/response.json -2> ( 28%) Resolving: self/v1/schemas/api/schemas/trace/request.json -2> ( 30%) Resolving: self/v1/schemas/api/schemas/trace/response.json -2> ( 31%) Resolving: self/v1/schemas/mcp/error.json -2> ( 33%) Resolving: self/v1/schemas/mcp/initialize/request.json -2> ( 34%) Resolving: self/v1/schemas/mcp/initialize/response.json -2> ( 36%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json -2> ( 38%) Resolving: self/v1/schemas/mcp/notifications/initialized.json -2> ( 39%) Resolving: self/v1/schemas/mcp/ping/request.json -2> ( 41%) Resolving: self/v1/schemas/mcp/ping/response.json -2> ( 42%) Resolving: self/v1/schemas/mcp/prm/response.json -2> ( 44%) Resolving: self/v1/schemas/mcp/request.json -2> ( 46%) Resolving: self/v1/schemas/mcp/resources/list/request.json -2> ( 47%) Resolving: self/v1/schemas/mcp/resources/list/response.json -2> ( 49%) Resolving: self/v1/schemas/mcp/resources/read/request.json -2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/response.json -2> ( 52%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json -2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json -2> ( 55%) Resolving: self/v1/schemas/mcp/response.json -2> ( 57%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json -2> ( 58%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json -2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json -2> ( 61%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json -2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json -2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json -2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json -2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json -2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json -2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json +2> ( 6%) Resolving: self/v1/schemas/api/playground/schemas/trace/request.json +2> ( 7%) Resolving: self/v1/schemas/api/playground/schemas/trace/response.json +2> ( 9%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json +2> ( 10%) Resolving: self/v1/schemas/api/schemas/dependents/response.json +2> ( 12%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json +2> ( 13%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json +2> ( 15%) Resolving: self/v1/schemas/api/schemas/health/response.json +2> ( 16%) Resolving: self/v1/schemas/api/schemas/locations/response.json +2> ( 18%) Resolving: self/v1/schemas/api/schemas/metadata/response.json +2> ( 20%) Resolving: self/v1/schemas/api/schemas/output-error.json +2> ( 21%) Resolving: self/v1/schemas/api/schemas/position.json +2> ( 23%) Resolving: self/v1/schemas/api/schemas/positions/response.json +2> ( 24%) Resolving: self/v1/schemas/api/schemas/rdf/request.json +2> ( 26%) Resolving: self/v1/schemas/api/schemas/rdf/response.json +2> ( 27%) Resolving: self/v1/schemas/api/schemas/search/response.json +2> ( 29%) Resolving: self/v1/schemas/api/schemas/stats/response.json +2> ( 30%) Resolving: self/v1/schemas/api/schemas/trace/request.json +2> ( 32%) Resolving: self/v1/schemas/api/schemas/trace/response.json +2> ( 33%) Resolving: self/v1/schemas/mcp/error.json +2> ( 35%) Resolving: self/v1/schemas/mcp/initialize/request.json +2> ( 36%) Resolving: self/v1/schemas/mcp/initialize/response.json +2> ( 38%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json +2> ( 40%) Resolving: self/v1/schemas/mcp/notifications/initialized.json +2> ( 41%) Resolving: self/v1/schemas/mcp/ping/request.json +2> ( 43%) Resolving: self/v1/schemas/mcp/ping/response.json +2> ( 44%) Resolving: self/v1/schemas/mcp/prm/response.json +2> ( 46%) Resolving: self/v1/schemas/mcp/request.json +2> ( 47%) Resolving: self/v1/schemas/mcp/resources/list/request.json +2> ( 49%) Resolving: self/v1/schemas/mcp/resources/list/response.json +2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/request.json +2> ( 52%) Resolving: self/v1/schemas/mcp/resources/read/response.json +2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json +2> ( 55%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json +2> ( 56%) Resolving: self/v1/schemas/mcp/response.json +2> ( 58%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json +2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json +2> ( 61%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json +2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json +2> ( 64%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json +2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json +2> ( 67%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json +2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json +2> ( 70%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json +2> ( 72%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json 2> ( 73%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json -2> ( 74%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json +2> ( 75%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json 2> ( 76%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json -2> ( 77%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json -2> ( 79%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json -2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json -2> ( 82%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json +2> ( 78%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json +2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json +2> ( 81%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json +2> ( 83%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json 2> ( 84%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json -2> ( 85%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json +2> ( 86%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json 2> ( 87%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/response.json -2> ( 88%) Resolving: self/v1/schemas/mcp/tools/call/request.json +2> ( 89%) Resolving: self/v1/schemas/mcp/tools/call/request.json 2> ( 90%) Resolving: self/v1/schemas/mcp/tools/call/response.json 2> ( 92%) Resolving: self/v1/schemas/mcp/tools/call/search-schemas/request.json 2> ( 93%) Resolving: self/v1/schemas/mcp/tools/call/search-schemas/response.json @@ -148,13 +152,15 @@ WRITE expected.txt UNTIL EOF 2> ( 0%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/position/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/schema.metapack @@ -162,7 +168,7 @@ WRITE expected.txt UNTIL EOF 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/schema.metapack @@ -171,7 +177,7 @@ WRITE expected.txt UNTIL EOF 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/schema.metapack -2> ( 3%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/schema.metapack +2> ( 4%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/request/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/schema.metapack @@ -197,7 +203,7 @@ WRITE expected.txt UNTIL EOF 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack -2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack +2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/schema.metapack @@ -221,136 +227,144 @@ WRITE expected.txt UNTIL EOF 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/positions.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/positions.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/stats.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/stats.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/dependencies.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/dependencies.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/locations.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/positions.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependencies.metapack @@ -358,8 +372,8 @@ WRITE expected.txt UNTIL EOF 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/locations.metapack @@ -367,8 +381,8 @@ WRITE expected.txt UNTIL EOF 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/positions.metapack @@ -376,7 +390,7 @@ WRITE expected.txt UNTIL EOF 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/positions.metapack @@ -384,8 +398,8 @@ WRITE expected.txt UNTIL EOF 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/positions.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/stats.metapack @@ -393,7 +407,7 @@ WRITE expected.txt UNTIL EOF 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/stats.metapack -2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack +2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/stats.metapack @@ -402,7 +416,7 @@ WRITE expected.txt UNTIL EOF 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependencies.metapack -2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack +2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependencies.metapack @@ -437,7 +451,7 @@ WRITE expected.txt UNTIL EOF 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/locations.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/positions.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/stats.metapack -2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependencies.metapack +2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependencies.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/positions.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/stats.metapack @@ -454,7 +468,7 @@ WRITE expected.txt UNTIL EOF 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/positions.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/dependencies.metapack -2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack +2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/dependencies.metapack @@ -463,14 +477,18 @@ WRITE expected.txt UNTIL EOF 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/bundle.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/bundle.metapack @@ -478,8 +496,8 @@ WRITE expected.txt UNTIL EOF 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/health.metapack @@ -487,7 +505,7 @@ WRITE expected.txt UNTIL EOF 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/health.metapack @@ -496,7 +514,7 @@ WRITE expected.txt UNTIL EOF 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/error/%/bundle.metapack @@ -504,8 +522,8 @@ WRITE expected.txt UNTIL EOF 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/bundle.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/health.metapack @@ -513,7 +531,7 @@ WRITE expected.txt UNTIL EOF 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/health.metapack -2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack +2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/health.metapack @@ -522,7 +540,7 @@ WRITE expected.txt UNTIL EOF 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/bundle.metapack -2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/health.metapack +2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/health.metapack 2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/bundle.metapack 2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/health.metapack 2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/bundle.metapack @@ -548,7 +566,7 @@ WRITE expected.txt UNTIL EOF 2> ( 47%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/bundle.metapack 2> ( 47%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/health.metapack 2> ( 47%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/bundle.metapack -2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/health.metapack +2> ( 47%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/bundle.metapack @@ -557,7 +575,7 @@ WRITE expected.txt UNTIL EOF 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/health.metapack -2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack +2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/health.metapack @@ -565,7 +583,7 @@ WRITE expected.txt UNTIL EOF 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/health.metapack -2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack +2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/health.metapack @@ -574,7 +592,7 @@ WRITE expected.txt UNTIL EOF 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/bundle.metapack -2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack +2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/bundle.metapack @@ -583,13 +601,15 @@ WRITE expected.txt UNTIL EOF 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/health.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/health.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/error/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack @@ -608,7 +628,7 @@ WRITE expected.txt UNTIL EOF 2> ( 54%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 54%) Producing: explorer/public/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 54%) Producing: explorer/public/self/v1/schemas/mcp/initialize/request/%/schema.metapack -2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/initialize/response/%/schema.metapack +2> ( 54%) Producing: explorer/public/self/v1/schemas/mcp/initialize/response/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/ping/request/%/schema.metapack @@ -617,7 +637,7 @@ WRITE expected.txt UNTIL EOF 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema.metapack -2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack +2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack @@ -625,8 +645,8 @@ WRITE expected.txt UNTIL EOF 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack @@ -634,7 +654,7 @@ WRITE expected.txt UNTIL EOF 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack @@ -643,7 +663,7 @@ WRITE expected.txt UNTIL EOF 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack @@ -651,57 +671,63 @@ WRITE expected.txt UNTIL EOF 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema.metapack 2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-exhaustive.metapack @@ -709,8 +735,8 @@ WRITE expected.txt UNTIL EOF 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/blaze-exhaustive.metapack @@ -718,8 +744,8 @@ WRITE expected.txt UNTIL EOF 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/blaze-exhaustive.metapack @@ -727,7 +753,7 @@ WRITE expected.txt UNTIL EOF 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack -2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack +2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/editor.metapack @@ -736,7 +762,7 @@ WRITE expected.txt UNTIL EOF 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack -2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack +2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-fast.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/editor.metapack @@ -753,7 +779,7 @@ WRITE expected.txt UNTIL EOF 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/blaze-fast.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-exhaustive.metapack -2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-fast.metapack +2> ( 72%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-fast.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-exhaustive.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-fast.metapack @@ -779,7 +805,7 @@ WRITE expected.txt UNTIL EOF 2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/blaze-exhaustive.metapack 2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/blaze-fast.metapack 2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/editor.metapack -2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/blaze-exhaustive.metapack +2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/blaze-exhaustive.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/editor.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/blaze-exhaustive.metapack @@ -788,7 +814,7 @@ WRITE expected.txt UNTIL EOF 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-exhaustive.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/editor.metapack -2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack +2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-exhaustive.metapack @@ -797,7 +823,7 @@ WRITE expected.txt UNTIL EOF 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/editor.metapack -2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack +2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-exhaustive.metapack @@ -805,8 +831,8 @@ WRITE expected.txt UNTIL EOF 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-fast.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-exhaustive.metapack @@ -814,7 +840,7 @@ WRITE expected.txt UNTIL EOF 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-fast.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/editor.metapack @@ -822,8 +848,8 @@ WRITE expected.txt UNTIL EOF 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-exhaustive.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/editor.metapack @@ -831,19 +857,22 @@ WRITE expected.txt UNTIL EOF 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-exhaustive.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/editor.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory.metapack @@ -865,7 +894,7 @@ WRITE expected.txt UNTIL EOF 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/schema-html.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/schema-html.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/search/%/directory.metapack -2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/search/response/%/schema-html.metapack +2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/search/response/%/schema-html.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/response/%/schema-html.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory.metapack @@ -882,7 +911,7 @@ WRITE expected.txt UNTIL EOF 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/request/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory.metapack -2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack +2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema-html.metapack @@ -891,7 +920,7 @@ WRITE expected.txt UNTIL EOF 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory.metapack @@ -899,8 +928,8 @@ WRITE expected.txt UNTIL EOF 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema-html.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory.metapack @@ -908,41 +937,43 @@ WRITE expected.txt UNTIL EOF 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/list/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/positions/%/directory-html.metapack @@ -951,7 +982,7 @@ WRITE expected.txt UNTIL EOF 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/ping/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory-html.metapack @@ -959,8 +990,8 @@ WRITE expected.txt UNTIL EOF 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory-html.metapack @@ -968,22 +999,25 @@ WRITE expected.txt UNTIL EOF 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/v1/%/directory.metapack 2> ( 99%) Producing: explorer/public/self/v1/schemas/%/directory-html.metapack @@ -997,59 +1031,61 @@ WRITE expected.txt UNTIL EOF 2> ( 1%) Combining: explorer/public/self/v1/schemas/api/auth/login/response/%/dependents.metapack 2> ( 3%) Combining: explorer/public/self/v1/schemas/api/error/%/dependents.metapack 2> ( 4%) Combining: explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack -2> ( 6%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack -2> ( 7%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack -2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack -2> ( 11%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack -2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack -2> ( 14%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack -2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack -2> ( 17%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack -2> ( 19%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack -2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack -2> ( 22%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack -2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack -2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack -2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack -2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack -2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack -2> ( 31%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack -2> ( 33%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack -2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack -2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack -2> ( 38%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack -2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack -2> ( 41%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack -2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack -2> ( 44%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack -2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack -2> ( 47%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack -2> ( 49%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack -2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack -2> ( 52%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack -2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack -2> ( 55%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack -2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack -2> ( 58%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack -2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack -2> ( 61%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack -2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack -2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack -2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack -2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack -2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack -2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack +2> ( 6%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +2> ( 7%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack +2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack +2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack +2> ( 13%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack +2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack +2> ( 16%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack +2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack +2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack +2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack +2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack +2> ( 24%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack +2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack +2> ( 27%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack +2> ( 29%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack +2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack +2> ( 32%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack +2> ( 33%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack +2> ( 35%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack +2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack +2> ( 38%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack +2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack +2> ( 41%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack +2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack +2> ( 44%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack +2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack +2> ( 47%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack +2> ( 49%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack +2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack +2> ( 52%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack +2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack +2> ( 55%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack +2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack +2> ( 58%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack +2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack +2> ( 61%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack +2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack +2> ( 64%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack +2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack +2> ( 67%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack +2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack +2> ( 70%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack +2> ( 72%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack 2> ( 73%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack -2> ( 74%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack +2> ( 75%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack 2> ( 76%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack -2> ( 77%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack -2> ( 79%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack -2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack -2> ( 82%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack +2> ( 78%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack +2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack +2> ( 81%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack +2> ( 83%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack 2> ( 84%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/dependents.metapack -2> ( 85%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack +2> ( 86%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack 2> ( 87%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/dependents.metapack -2> ( 88%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack +2> ( 89%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack 2> ( 90%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/response/%/dependents.metapack 2> ( 92%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependents.metapack 2> ( 93%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/dependents.metapack @@ -1080,66 +1116,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#1) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#3) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#4) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#65) 2> (100%) Disposing: comment.json EOF diff --git a/test/cli/index/common/rebuild-comment-updated.clitest b/test/cli/index/common/rebuild-comment-updated.clitest index e9e15e252..1a83c6514 100644 --- a/test/cli/index/common/rebuild-comment-updated.clitest +++ b/test/cli/index/common/rebuild-comment-updated.clitest @@ -15,122 +15,126 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#1) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#3) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#4) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#65) 2> ( 1%) Resolving: self/v1/schemas/api/auth/login/response.json 2> ( 3%) Resolving: self/v1/schemas/api/error.json 2> ( 4%) Resolving: self/v1/schemas/api/list/response.json -2> ( 6%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json -2> ( 7%) Resolving: self/v1/schemas/api/schemas/dependents/response.json -2> ( 9%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json -2> ( 11%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json -2> ( 12%) Resolving: self/v1/schemas/api/schemas/health/response.json -2> ( 14%) Resolving: self/v1/schemas/api/schemas/locations/response.json -2> ( 15%) Resolving: self/v1/schemas/api/schemas/metadata/response.json -2> ( 17%) Resolving: self/v1/schemas/api/schemas/output-error.json -2> ( 19%) Resolving: self/v1/schemas/api/schemas/position.json -2> ( 20%) Resolving: self/v1/schemas/api/schemas/positions/response.json -2> ( 22%) Resolving: self/v1/schemas/api/schemas/rdf/request.json -2> ( 23%) Resolving: self/v1/schemas/api/schemas/rdf/response.json -2> ( 25%) Resolving: self/v1/schemas/api/schemas/search/response.json -2> ( 26%) Resolving: self/v1/schemas/api/schemas/stats/response.json -2> ( 28%) Resolving: self/v1/schemas/api/schemas/trace/request.json -2> ( 30%) Resolving: self/v1/schemas/api/schemas/trace/response.json -2> ( 31%) Resolving: self/v1/schemas/mcp/error.json -2> ( 33%) Resolving: self/v1/schemas/mcp/initialize/request.json -2> ( 34%) Resolving: self/v1/schemas/mcp/initialize/response.json -2> ( 36%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json -2> ( 38%) Resolving: self/v1/schemas/mcp/notifications/initialized.json -2> ( 39%) Resolving: self/v1/schemas/mcp/ping/request.json -2> ( 41%) Resolving: self/v1/schemas/mcp/ping/response.json -2> ( 42%) Resolving: self/v1/schemas/mcp/prm/response.json -2> ( 44%) Resolving: self/v1/schemas/mcp/request.json -2> ( 46%) Resolving: self/v1/schemas/mcp/resources/list/request.json -2> ( 47%) Resolving: self/v1/schemas/mcp/resources/list/response.json -2> ( 49%) Resolving: self/v1/schemas/mcp/resources/read/request.json -2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/response.json -2> ( 52%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json -2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json -2> ( 55%) Resolving: self/v1/schemas/mcp/response.json -2> ( 57%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json -2> ( 58%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json -2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json -2> ( 61%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json -2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json -2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json -2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json -2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json -2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json -2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json +2> ( 6%) Resolving: self/v1/schemas/api/playground/schemas/trace/request.json +2> ( 7%) Resolving: self/v1/schemas/api/playground/schemas/trace/response.json +2> ( 9%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json +2> ( 10%) Resolving: self/v1/schemas/api/schemas/dependents/response.json +2> ( 12%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json +2> ( 13%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json +2> ( 15%) Resolving: self/v1/schemas/api/schemas/health/response.json +2> ( 16%) Resolving: self/v1/schemas/api/schemas/locations/response.json +2> ( 18%) Resolving: self/v1/schemas/api/schemas/metadata/response.json +2> ( 20%) Resolving: self/v1/schemas/api/schemas/output-error.json +2> ( 21%) Resolving: self/v1/schemas/api/schemas/position.json +2> ( 23%) Resolving: self/v1/schemas/api/schemas/positions/response.json +2> ( 24%) Resolving: self/v1/schemas/api/schemas/rdf/request.json +2> ( 26%) Resolving: self/v1/schemas/api/schemas/rdf/response.json +2> ( 27%) Resolving: self/v1/schemas/api/schemas/search/response.json +2> ( 29%) Resolving: self/v1/schemas/api/schemas/stats/response.json +2> ( 30%) Resolving: self/v1/schemas/api/schemas/trace/request.json +2> ( 32%) Resolving: self/v1/schemas/api/schemas/trace/response.json +2> ( 33%) Resolving: self/v1/schemas/mcp/error.json +2> ( 35%) Resolving: self/v1/schemas/mcp/initialize/request.json +2> ( 36%) Resolving: self/v1/schemas/mcp/initialize/response.json +2> ( 38%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json +2> ( 40%) Resolving: self/v1/schemas/mcp/notifications/initialized.json +2> ( 41%) Resolving: self/v1/schemas/mcp/ping/request.json +2> ( 43%) Resolving: self/v1/schemas/mcp/ping/response.json +2> ( 44%) Resolving: self/v1/schemas/mcp/prm/response.json +2> ( 46%) Resolving: self/v1/schemas/mcp/request.json +2> ( 47%) Resolving: self/v1/schemas/mcp/resources/list/request.json +2> ( 49%) Resolving: self/v1/schemas/mcp/resources/list/response.json +2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/request.json +2> ( 52%) Resolving: self/v1/schemas/mcp/resources/read/response.json +2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json +2> ( 55%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json +2> ( 56%) Resolving: self/v1/schemas/mcp/response.json +2> ( 58%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json +2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json +2> ( 61%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json +2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json +2> ( 64%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json +2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json +2> ( 67%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json +2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json +2> ( 70%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json +2> ( 72%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json 2> ( 73%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json -2> ( 74%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json +2> ( 75%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json 2> ( 76%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json -2> ( 77%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json -2> ( 79%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json -2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json -2> ( 82%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json +2> ( 78%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json +2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json +2> ( 81%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json +2> ( 83%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json 2> ( 84%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json -2> ( 85%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json +2> ( 86%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json 2> ( 87%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/response.json -2> ( 88%) Resolving: self/v1/schemas/mcp/tools/call/request.json +2> ( 89%) Resolving: self/v1/schemas/mcp/tools/call/request.json 2> ( 90%) Resolving: self/v1/schemas/mcp/tools/call/response.json 2> ( 92%) Resolving: self/v1/schemas/mcp/tools/call/search-schemas/request.json 2> ( 93%) Resolving: self/v1/schemas/mcp/tools/call/search-schemas/response.json @@ -148,13 +152,15 @@ WRITE expected.txt UNTIL EOF 2> ( 0%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/position/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/schema.metapack @@ -162,7 +168,7 @@ WRITE expected.txt UNTIL EOF 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/schema.metapack @@ -171,7 +177,7 @@ WRITE expected.txt UNTIL EOF 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/schema.metapack -2> ( 3%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/schema.metapack +2> ( 4%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/request/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/schema.metapack @@ -197,7 +203,7 @@ WRITE expected.txt UNTIL EOF 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack -2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack +2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/schema.metapack @@ -221,136 +227,144 @@ WRITE expected.txt UNTIL EOF 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/positions.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/positions.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/stats.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/stats.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/dependencies.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/dependencies.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/locations.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/positions.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependencies.metapack @@ -358,8 +372,8 @@ WRITE expected.txt UNTIL EOF 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/locations.metapack @@ -367,8 +381,8 @@ WRITE expected.txt UNTIL EOF 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/positions.metapack @@ -376,7 +390,7 @@ WRITE expected.txt UNTIL EOF 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/positions.metapack @@ -384,8 +398,8 @@ WRITE expected.txt UNTIL EOF 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/positions.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/stats.metapack @@ -393,7 +407,7 @@ WRITE expected.txt UNTIL EOF 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/stats.metapack -2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack +2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/stats.metapack @@ -402,7 +416,7 @@ WRITE expected.txt UNTIL EOF 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependencies.metapack -2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack +2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependencies.metapack @@ -437,7 +451,7 @@ WRITE expected.txt UNTIL EOF 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/locations.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/positions.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/stats.metapack -2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependencies.metapack +2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependencies.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/positions.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/stats.metapack @@ -454,7 +468,7 @@ WRITE expected.txt UNTIL EOF 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/positions.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/dependencies.metapack -2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack +2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/dependencies.metapack @@ -463,14 +477,18 @@ WRITE expected.txt UNTIL EOF 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/bundle.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/bundle.metapack @@ -478,8 +496,8 @@ WRITE expected.txt UNTIL EOF 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/health.metapack @@ -487,7 +505,7 @@ WRITE expected.txt UNTIL EOF 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/health.metapack @@ -496,7 +514,7 @@ WRITE expected.txt UNTIL EOF 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/error/%/bundle.metapack @@ -504,8 +522,8 @@ WRITE expected.txt UNTIL EOF 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/bundle.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/health.metapack @@ -513,7 +531,7 @@ WRITE expected.txt UNTIL EOF 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/health.metapack -2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack +2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/health.metapack @@ -522,7 +540,7 @@ WRITE expected.txt UNTIL EOF 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/bundle.metapack -2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/health.metapack +2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/health.metapack 2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/bundle.metapack 2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/health.metapack 2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/bundle.metapack @@ -548,7 +566,7 @@ WRITE expected.txt UNTIL EOF 2> ( 47%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/bundle.metapack 2> ( 47%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/health.metapack 2> ( 47%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/bundle.metapack -2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/health.metapack +2> ( 47%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/bundle.metapack @@ -557,7 +575,7 @@ WRITE expected.txt UNTIL EOF 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/health.metapack -2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack +2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/health.metapack @@ -565,7 +583,7 @@ WRITE expected.txt UNTIL EOF 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/health.metapack -2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack +2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/health.metapack @@ -574,7 +592,7 @@ WRITE expected.txt UNTIL EOF 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/bundle.metapack -2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack +2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/bundle.metapack @@ -583,13 +601,15 @@ WRITE expected.txt UNTIL EOF 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/health.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/health.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/error/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack @@ -608,7 +628,7 @@ WRITE expected.txt UNTIL EOF 2> ( 54%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 54%) Producing: explorer/public/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 54%) Producing: explorer/public/self/v1/schemas/mcp/initialize/request/%/schema.metapack -2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/initialize/response/%/schema.metapack +2> ( 54%) Producing: explorer/public/self/v1/schemas/mcp/initialize/response/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/ping/request/%/schema.metapack @@ -617,7 +637,7 @@ WRITE expected.txt UNTIL EOF 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema.metapack -2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack +2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack @@ -625,8 +645,8 @@ WRITE expected.txt UNTIL EOF 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack @@ -634,7 +654,7 @@ WRITE expected.txt UNTIL EOF 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack @@ -643,7 +663,7 @@ WRITE expected.txt UNTIL EOF 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack @@ -651,57 +671,63 @@ WRITE expected.txt UNTIL EOF 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema.metapack 2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-exhaustive.metapack @@ -709,8 +735,8 @@ WRITE expected.txt UNTIL EOF 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/blaze-exhaustive.metapack @@ -718,8 +744,8 @@ WRITE expected.txt UNTIL EOF 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/blaze-exhaustive.metapack @@ -727,7 +753,7 @@ WRITE expected.txt UNTIL EOF 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack -2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack +2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/editor.metapack @@ -736,7 +762,7 @@ WRITE expected.txt UNTIL EOF 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack -2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack +2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-fast.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/editor.metapack @@ -753,7 +779,7 @@ WRITE expected.txt UNTIL EOF 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/blaze-fast.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-exhaustive.metapack -2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-fast.metapack +2> ( 72%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-fast.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-exhaustive.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-fast.metapack @@ -779,7 +805,7 @@ WRITE expected.txt UNTIL EOF 2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/blaze-exhaustive.metapack 2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/blaze-fast.metapack 2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/editor.metapack -2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/blaze-exhaustive.metapack +2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/blaze-exhaustive.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/editor.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/blaze-exhaustive.metapack @@ -788,7 +814,7 @@ WRITE expected.txt UNTIL EOF 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-exhaustive.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/editor.metapack -2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack +2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-exhaustive.metapack @@ -797,7 +823,7 @@ WRITE expected.txt UNTIL EOF 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/editor.metapack -2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack +2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-exhaustive.metapack @@ -805,8 +831,8 @@ WRITE expected.txt UNTIL EOF 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-fast.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-exhaustive.metapack @@ -814,7 +840,7 @@ WRITE expected.txt UNTIL EOF 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-fast.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/editor.metapack @@ -822,8 +848,8 @@ WRITE expected.txt UNTIL EOF 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-exhaustive.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/editor.metapack @@ -831,19 +857,22 @@ WRITE expected.txt UNTIL EOF 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-exhaustive.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/editor.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory.metapack @@ -865,7 +894,7 @@ WRITE expected.txt UNTIL EOF 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/schema-html.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/schema-html.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/search/%/directory.metapack -2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/search/response/%/schema-html.metapack +2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/search/response/%/schema-html.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/response/%/schema-html.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory.metapack @@ -882,7 +911,7 @@ WRITE expected.txt UNTIL EOF 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/request/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory.metapack -2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack +2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema-html.metapack @@ -891,7 +920,7 @@ WRITE expected.txt UNTIL EOF 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory.metapack @@ -899,8 +928,8 @@ WRITE expected.txt UNTIL EOF 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema-html.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory.metapack @@ -908,41 +937,43 @@ WRITE expected.txt UNTIL EOF 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/list/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/positions/%/directory-html.metapack @@ -951,7 +982,7 @@ WRITE expected.txt UNTIL EOF 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/ping/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory-html.metapack @@ -959,8 +990,8 @@ WRITE expected.txt UNTIL EOF 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory-html.metapack @@ -968,22 +999,25 @@ WRITE expected.txt UNTIL EOF 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/v1/%/directory.metapack 2> ( 99%) Producing: explorer/public/self/v1/schemas/%/directory-html.metapack @@ -997,59 +1031,61 @@ WRITE expected.txt UNTIL EOF 2> ( 1%) Combining: explorer/public/self/v1/schemas/api/auth/login/response/%/dependents.metapack 2> ( 3%) Combining: explorer/public/self/v1/schemas/api/error/%/dependents.metapack 2> ( 4%) Combining: explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack -2> ( 6%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack -2> ( 7%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack -2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack -2> ( 11%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack -2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack -2> ( 14%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack -2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack -2> ( 17%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack -2> ( 19%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack -2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack -2> ( 22%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack -2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack -2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack -2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack -2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack -2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack -2> ( 31%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack -2> ( 33%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack -2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack -2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack -2> ( 38%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack -2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack -2> ( 41%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack -2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack -2> ( 44%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack -2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack -2> ( 47%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack -2> ( 49%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack -2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack -2> ( 52%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack -2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack -2> ( 55%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack -2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack -2> ( 58%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack -2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack -2> ( 61%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack -2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack -2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack -2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack -2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack -2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack -2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack +2> ( 6%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +2> ( 7%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack +2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack +2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack +2> ( 13%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack +2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack +2> ( 16%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack +2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack +2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack +2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack +2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack +2> ( 24%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack +2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack +2> ( 27%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack +2> ( 29%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack +2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack +2> ( 32%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack +2> ( 33%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack +2> ( 35%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack +2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack +2> ( 38%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack +2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack +2> ( 41%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack +2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack +2> ( 44%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack +2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack +2> ( 47%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack +2> ( 49%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack +2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack +2> ( 52%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack +2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack +2> ( 55%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack +2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack +2> ( 58%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack +2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack +2> ( 61%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack +2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack +2> ( 64%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack +2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack +2> ( 67%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack +2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack +2> ( 70%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack +2> ( 72%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack 2> ( 73%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack -2> ( 74%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack +2> ( 75%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack 2> ( 76%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack -2> ( 77%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack -2> ( 79%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack -2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack -2> ( 82%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack +2> ( 78%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack +2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack +2> ( 81%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack +2> ( 83%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack 2> ( 84%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/dependents.metapack -2> ( 85%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack +2> ( 86%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack 2> ( 87%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/dependents.metapack -2> ( 88%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack +2> ( 89%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack 2> ( 90%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/response/%/dependents.metapack 2> ( 92%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependents.metapack 2> ( 93%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/dependents.metapack @@ -1080,66 +1116,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#1) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#3) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#4) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#65) 2> (100%) Producing: comment.json EOF diff --git a/test/cli/index/common/rebuild-deleted-deps.clitest b/test/cli/index/common/rebuild-deleted-deps.clitest index 2417452fd..32d37804b 100644 --- a/test/cli/index/common/rebuild-deleted-deps.clitest +++ b/test/cli/index/common/rebuild-deleted-deps.clitest @@ -60,121 +60,125 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> ( 1%) Resolving: example/schemas/a.json 2> ( 3%) Resolving: self/v1/schemas/api/auth/login/response.json 2> ( 4%) Resolving: self/v1/schemas/api/error.json 2> ( 6%) Resolving: self/v1/schemas/api/list/response.json -2> ( 7%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json -2> ( 9%) Resolving: self/v1/schemas/api/schemas/dependents/response.json -2> ( 10%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json -2> ( 12%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json -2> ( 14%) Resolving: self/v1/schemas/api/schemas/health/response.json -2> ( 15%) Resolving: self/v1/schemas/api/schemas/locations/response.json -2> ( 17%) Resolving: self/v1/schemas/api/schemas/metadata/response.json -2> ( 18%) Resolving: self/v1/schemas/api/schemas/output-error.json -2> ( 20%) Resolving: self/v1/schemas/api/schemas/position.json -2> ( 21%) Resolving: self/v1/schemas/api/schemas/positions/response.json -2> ( 23%) Resolving: self/v1/schemas/api/schemas/rdf/request.json -2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/response.json -2> ( 26%) Resolving: self/v1/schemas/api/schemas/search/response.json -2> ( 28%) Resolving: self/v1/schemas/api/schemas/stats/response.json -2> ( 29%) Resolving: self/v1/schemas/api/schemas/trace/request.json -2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/response.json -2> ( 32%) Resolving: self/v1/schemas/mcp/error.json -2> ( 34%) Resolving: self/v1/schemas/mcp/initialize/request.json -2> ( 35%) Resolving: self/v1/schemas/mcp/initialize/response.json -2> ( 37%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json -2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/initialized.json -2> ( 40%) Resolving: self/v1/schemas/mcp/ping/request.json -2> ( 42%) Resolving: self/v1/schemas/mcp/ping/response.json -2> ( 43%) Resolving: self/v1/schemas/mcp/prm/response.json -2> ( 45%) Resolving: self/v1/schemas/mcp/request.json -2> ( 46%) Resolving: self/v1/schemas/mcp/resources/list/request.json -2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/response.json -2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/request.json -2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/response.json -2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json -2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json -2> ( 56%) Resolving: self/v1/schemas/mcp/response.json -2> ( 57%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json -2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json -2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json -2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json -2> ( 64%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json -2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json -2> ( 67%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json -2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json -2> ( 70%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json -2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json -2> ( 73%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json +2> ( 7%) Resolving: self/v1/schemas/api/playground/schemas/trace/request.json +2> ( 9%) Resolving: self/v1/schemas/api/playground/schemas/trace/response.json +2> ( 10%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json +2> ( 12%) Resolving: self/v1/schemas/api/schemas/dependents/response.json +2> ( 13%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json +2> ( 15%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json +2> ( 16%) Resolving: self/v1/schemas/api/schemas/health/response.json +2> ( 18%) Resolving: self/v1/schemas/api/schemas/locations/response.json +2> ( 19%) Resolving: self/v1/schemas/api/schemas/metadata/response.json +2> ( 21%) Resolving: self/v1/schemas/api/schemas/output-error.json +2> ( 22%) Resolving: self/v1/schemas/api/schemas/position.json +2> ( 24%) Resolving: self/v1/schemas/api/schemas/positions/response.json +2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/request.json +2> ( 27%) Resolving: self/v1/schemas/api/schemas/rdf/response.json +2> ( 28%) Resolving: self/v1/schemas/api/schemas/search/response.json +2> ( 30%) Resolving: self/v1/schemas/api/schemas/stats/response.json +2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/request.json +2> ( 33%) Resolving: self/v1/schemas/api/schemas/trace/response.json +2> ( 34%) Resolving: self/v1/schemas/mcp/error.json +2> ( 36%) Resolving: self/v1/schemas/mcp/initialize/request.json +2> ( 37%) Resolving: self/v1/schemas/mcp/initialize/response.json +2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json +2> ( 40%) Resolving: self/v1/schemas/mcp/notifications/initialized.json +2> ( 42%) Resolving: self/v1/schemas/mcp/ping/request.json +2> ( 43%) Resolving: self/v1/schemas/mcp/ping/response.json +2> ( 45%) Resolving: self/v1/schemas/mcp/prm/response.json +2> ( 46%) Resolving: self/v1/schemas/mcp/request.json +2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/request.json +2> ( 50%) Resolving: self/v1/schemas/mcp/resources/list/response.json +2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/request.json +2> ( 53%) Resolving: self/v1/schemas/mcp/resources/read/response.json +2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json +2> ( 56%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json +2> ( 57%) Resolving: self/v1/schemas/mcp/response.json +2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json +2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json +2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json +2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json +2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json +2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json +2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json +2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json +2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json +2> ( 72%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json +2> ( 74%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json 2> ( 75%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json -2> ( 76%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json +2> ( 77%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json 2> ( 78%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json -2> ( 79%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json +2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json 2> ( 81%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json -2> ( 82%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json +2> ( 83%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json 2> ( 84%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json -2> ( 85%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json +2> ( 86%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json 2> ( 87%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/response.json 2> ( 89%) Resolving: self/v1/schemas/mcp/tools/call/request.json 2> ( 90%) Resolving: self/v1/schemas/mcp/tools/call/response.json @@ -192,15 +196,17 @@ WRITE expected.txt UNTIL EOF 2> ( 0%) Producing: explorer/public/%/login.metapack 2> ( 0%) Producing: schemas/example/schemas/a/%/schema.metapack 2> ( 0%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack +2> ( 0%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/position/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/schema.metapack @@ -209,7 +215,7 @@ WRITE expected.txt UNTIL EOF 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/schema.metapack @@ -244,7 +250,7 @@ WRITE expected.txt UNTIL EOF 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack -2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack +2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/schema.metapack @@ -253,7 +259,7 @@ WRITE expected.txt UNTIL EOF 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/schema.metapack -2> ( 8%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack +2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack 2> ( 8%) Producing: explorer/public/%/login-html.metapack 2> ( 8%) Producing: schemas/example/schemas/a/%/dependencies.metapack 2> ( 8%) Producing: schemas/example/schemas/a/%/locations.metapack @@ -262,7 +268,7 @@ WRITE expected.txt UNTIL EOF 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/dependencies.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/locations.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/positions.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack +2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/dependencies.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/positions.metapack @@ -271,136 +277,144 @@ WRITE expected.txt UNTIL EOF 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/positions.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/positions.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/stats.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/stats.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/dependencies.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/dependencies.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/locations.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/positions.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependencies.metapack @@ -408,8 +422,8 @@ WRITE expected.txt UNTIL EOF 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/locations.metapack @@ -417,8 +431,8 @@ WRITE expected.txt UNTIL EOF 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/positions.metapack @@ -426,7 +440,7 @@ WRITE expected.txt UNTIL EOF 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/positions.metapack @@ -435,7 +449,7 @@ WRITE expected.txt UNTIL EOF 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/positions.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/stats.metapack @@ -444,7 +458,7 @@ WRITE expected.txt UNTIL EOF 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/stats.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack -2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack +2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependencies.metapack @@ -453,7 +467,7 @@ WRITE expected.txt UNTIL EOF 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependencies.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack -2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack +2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependencies.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/locations.metapack @@ -488,7 +502,7 @@ WRITE expected.txt UNTIL EOF 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/positions.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/stats.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependencies.metapack -2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack +2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/positions.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/dependencies.metapack @@ -497,7 +511,7 @@ WRITE expected.txt UNTIL EOF 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/dependencies.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/locations.metapack -2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack +2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/locations.metapack @@ -506,7 +520,7 @@ WRITE expected.txt UNTIL EOF 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack -2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack +2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/dependencies.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/locations.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/positions.metapack @@ -514,15 +528,19 @@ WRITE expected.txt UNTIL EOF 2> ( 37%) Producing: schemas/example/schemas/a/%/bundle.metapack 2> ( 37%) Producing: schemas/example/schemas/a/%/health.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/bundle.metapack @@ -530,8 +548,8 @@ WRITE expected.txt UNTIL EOF 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/health.metapack @@ -539,8 +557,8 @@ WRITE expected.txt UNTIL EOF 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/bundle.metapack @@ -548,7 +566,7 @@ WRITE expected.txt UNTIL EOF 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/error/%/bundle.metapack @@ -557,7 +575,7 @@ WRITE expected.txt UNTIL EOF 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/health.metapack @@ -566,7 +584,7 @@ WRITE expected.txt UNTIL EOF 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack -2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack +2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/bundle.metapack @@ -610,7 +628,7 @@ WRITE expected.txt UNTIL EOF 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack -2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack +2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/bundle.metapack @@ -619,7 +637,7 @@ WRITE expected.txt UNTIL EOF 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack -2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack +2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/health.metapack @@ -628,7 +646,7 @@ WRITE expected.txt UNTIL EOF 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack -2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack +2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/bundle.metapack @@ -636,13 +654,15 @@ WRITE expected.txt UNTIL EOF 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/health.metapack 2> ( 52%) Producing: explorer/public/example/schemas/a/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/error/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack @@ -671,7 +691,7 @@ WRITE expected.txt UNTIL EOF 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack -2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack +2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema.metapack @@ -680,7 +700,7 @@ WRITE expected.txt UNTIL EOF 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema.metapack @@ -689,7 +709,7 @@ WRITE expected.txt UNTIL EOF 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack @@ -697,8 +717,8 @@ WRITE expected.txt UNTIL EOF 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema.metapack @@ -706,8 +726,8 @@ WRITE expected.txt UNTIL EOF 2> ( 59%) Producing: schemas/example/schemas/a/%/blaze-exhaustive.metapack 2> ( 59%) Producing: schemas/example/schemas/a/%/blaze-fast.metapack 2> ( 59%) Producing: schemas/example/schemas/a/%/editor.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-fast.metapack @@ -715,49 +735,55 @@ WRITE expected.txt UNTIL EOF 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-exhaustive.metapack @@ -765,8 +791,8 @@ WRITE expected.txt UNTIL EOF 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/blaze-exhaustive.metapack @@ -774,8 +800,8 @@ WRITE expected.txt UNTIL EOF 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/blaze-exhaustive.metapack @@ -783,7 +809,7 @@ WRITE expected.txt UNTIL EOF 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack -2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack +2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/editor.metapack @@ -792,7 +818,7 @@ WRITE expected.txt UNTIL EOF 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack -2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack +2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-fast.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/editor.metapack @@ -801,7 +827,7 @@ WRITE expected.txt UNTIL EOF 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-fast.metapack -2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack +2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-fast.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/editor.metapack @@ -810,7 +836,7 @@ WRITE expected.txt UNTIL EOF 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-fast.metapack -2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack +2> ( 72%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-exhaustive.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-fast.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/editor.metapack @@ -845,7 +871,7 @@ WRITE expected.txt UNTIL EOF 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/editor.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack -2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack +2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-fast.metapack @@ -854,7 +880,7 @@ WRITE expected.txt UNTIL EOF 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack -2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack +2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-fast.metapack @@ -863,7 +889,7 @@ WRITE expected.txt UNTIL EOF 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-fast.metapack @@ -872,7 +898,7 @@ WRITE expected.txt UNTIL EOF 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-fast.metapack @@ -880,8 +906,8 @@ WRITE expected.txt UNTIL EOF 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-fast.metapack @@ -889,8 +915,8 @@ WRITE expected.txt UNTIL EOF 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-fast.metapack @@ -898,10 +924,13 @@ WRITE expected.txt UNTIL EOF 2> ( 81%) Producing: explorer/public/example/schemas/%/directory.metapack 2> ( 81%) Producing: explorer/public/example/schemas/a/%/schema-html.metapack 2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory.metapack @@ -941,7 +970,7 @@ WRITE expected.txt UNTIL EOF 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack -2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack +2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema-html.metapack @@ -950,7 +979,7 @@ WRITE expected.txt UNTIL EOF 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/schema-html.metapack @@ -959,7 +988,7 @@ WRITE expected.txt UNTIL EOF 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema-html.metapack @@ -967,8 +996,8 @@ WRITE expected.txt UNTIL EOF 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema-html.metapack @@ -976,8 +1005,8 @@ WRITE expected.txt UNTIL EOF 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema-html.metapack @@ -985,8 +1014,8 @@ WRITE expected.txt UNTIL EOF 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema-html.metapack @@ -994,15 +1023,17 @@ WRITE expected.txt UNTIL EOF 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/example/%/directory.metapack -2> ( 93%) Producing: explorer/public/example/schemas/%/directory-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack +2> ( 92%) Producing: explorer/public/example/schemas/%/directory-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/list/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/positions/%/directory-html.metapack @@ -1011,7 +1042,7 @@ WRITE expected.txt UNTIL EOF 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/ping/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory-html.metapack @@ -1020,7 +1051,7 @@ WRITE expected.txt UNTIL EOF 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory-html.metapack @@ -1028,24 +1059,27 @@ WRITE expected.txt UNTIL EOF 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/example/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 99%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/v1/%/directory.metapack 2> ( 99%) Producing: explorer/public/self/v1/schemas/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/%/directory.metapack @@ -1059,57 +1093,59 @@ WRITE expected.txt UNTIL EOF 2> ( 3%) Combining: explorer/public/self/v1/schemas/api/auth/login/response/%/dependents.metapack 2> ( 4%) Combining: explorer/public/self/v1/schemas/api/error/%/dependents.metapack 2> ( 6%) Combining: explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack -2> ( 7%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack -2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack -2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack -2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack -2> ( 14%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack -2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack -2> ( 17%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack -2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack -2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack -2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack -2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack -2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack -2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack -2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack -2> ( 29%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack -2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack -2> ( 32%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack -2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack -2> ( 35%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack -2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack -2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack -2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack -2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack -2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack -2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack -2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack -2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack -2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack -2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack -2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack -2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack -2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack -2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack -2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack -2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack -2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack -2> ( 64%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack -2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack -2> ( 67%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack -2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack -2> ( 70%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack -2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack -2> ( 73%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack +2> ( 7%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +2> ( 9%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack +2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack +2> ( 13%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack +2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack +2> ( 16%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack +2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack +2> ( 19%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack +2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack +2> ( 22%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack +2> ( 24%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack +2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack +2> ( 27%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack +2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack +2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack +2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack +2> ( 33%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack +2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack +2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack +2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack +2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack +2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack +2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack +2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack +2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack +2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack +2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack +2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack +2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack +2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack +2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack +2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack +2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack +2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack +2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack +2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack +2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack +2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack +2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack +2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack +2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack +2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack +2> ( 72%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack +2> ( 74%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack 2> ( 75%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack -2> ( 76%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack +2> ( 77%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack 2> ( 78%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack -2> ( 79%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack +2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack 2> ( 81%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack -2> ( 82%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack +2> ( 83%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack 2> ( 84%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/dependents.metapack -2> ( 85%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack +2> ( 86%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack 2> ( 87%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/dependents.metapack 2> ( 89%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack 2> ( 90%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/response/%/dependents.metapack diff --git a/test/cli/index/common/rebuild-dependents-add-schema.clitest b/test/cli/index/common/rebuild-dependents-add-schema.clitest index ee6f00283..2b9ed59df 100644 --- a/test/cli/index/common/rebuild-dependents-add-schema.clitest +++ b/test/cli/index/common/rebuild-dependents-add-schema.clitest @@ -190,6 +190,28 @@ WRITE expected_manifest.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -733,6 +755,33 @@ WRITE expected_manifest.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/rebuild-dependents-modify-add-ref.clitest b/test/cli/index/common/rebuild-dependents-modify-add-ref.clitest index 6a18ad416..1ff5d0d35 100644 --- a/test/cli/index/common/rebuild-dependents-modify-add-ref.clitest +++ b/test/cli/index/common/rebuild-dependents-modify-add-ref.clitest @@ -178,6 +178,28 @@ WRITE expected_manifest.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -709,6 +731,33 @@ WRITE expected_manifest.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/rebuild-dependents-modify-direct.clitest b/test/cli/index/common/rebuild-dependents-modify-direct.clitest index 9c0513e98..d595bf894 100644 --- a/test/cli/index/common/rebuild-dependents-modify-direct.clitest +++ b/test/cli/index/common/rebuild-dependents-modify-direct.clitest @@ -168,6 +168,28 @@ WRITE expected_manifest.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -699,6 +721,33 @@ WRITE expected_manifest.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/rebuild-dependents-modify-transitive.clitest b/test/cli/index/common/rebuild-dependents-modify-transitive.clitest index e4689df03..c58faf473 100644 --- a/test/cli/index/common/rebuild-dependents-modify-transitive.clitest +++ b/test/cli/index/common/rebuild-dependents-modify-transitive.clitest @@ -185,6 +185,28 @@ WRITE expected_manifest.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -728,6 +750,33 @@ WRITE expected_manifest.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/rebuild-dependents-remove-referencing-schema.clitest b/test/cli/index/common/rebuild-dependents-remove-referencing-schema.clitest index c67770bac..a88ab4a85 100644 --- a/test/cli/index/common/rebuild-dependents-remove-referencing-schema.clitest +++ b/test/cli/index/common/rebuild-dependents-remove-referencing-schema.clitest @@ -65,66 +65,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> ( 16%) Producing: explorer/public/%/directory.metapack 2> ( 33%) Producing: explorer/public/%/directory-html.metapack 2> ( 50%) Producing: explorer/public/%/search.metapack @@ -209,6 +211,28 @@ WRITE expected_manifest.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -716,6 +740,33 @@ WRITE expected_manifest.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/rebuild-extra-files.clitest b/test/cli/index/common/rebuild-extra-files.clitest index 2c89efe6b..035f2827d 100644 --- a/test/cli/index/common/rebuild-extra-files.clitest +++ b/test/cli/index/common/rebuild-extra-files.clitest @@ -33,121 +33,125 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> ( 1%) Resolving: example/schemas/test.json 2> ( 3%) Resolving: self/v1/schemas/api/auth/login/response.json 2> ( 4%) Resolving: self/v1/schemas/api/error.json 2> ( 6%) Resolving: self/v1/schemas/api/list/response.json -2> ( 7%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json -2> ( 9%) Resolving: self/v1/schemas/api/schemas/dependents/response.json -2> ( 10%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json -2> ( 12%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json -2> ( 14%) Resolving: self/v1/schemas/api/schemas/health/response.json -2> ( 15%) Resolving: self/v1/schemas/api/schemas/locations/response.json -2> ( 17%) Resolving: self/v1/schemas/api/schemas/metadata/response.json -2> ( 18%) Resolving: self/v1/schemas/api/schemas/output-error.json -2> ( 20%) Resolving: self/v1/schemas/api/schemas/position.json -2> ( 21%) Resolving: self/v1/schemas/api/schemas/positions/response.json -2> ( 23%) Resolving: self/v1/schemas/api/schemas/rdf/request.json -2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/response.json -2> ( 26%) Resolving: self/v1/schemas/api/schemas/search/response.json -2> ( 28%) Resolving: self/v1/schemas/api/schemas/stats/response.json -2> ( 29%) Resolving: self/v1/schemas/api/schemas/trace/request.json -2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/response.json -2> ( 32%) Resolving: self/v1/schemas/mcp/error.json -2> ( 34%) Resolving: self/v1/schemas/mcp/initialize/request.json -2> ( 35%) Resolving: self/v1/schemas/mcp/initialize/response.json -2> ( 37%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json -2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/initialized.json -2> ( 40%) Resolving: self/v1/schemas/mcp/ping/request.json -2> ( 42%) Resolving: self/v1/schemas/mcp/ping/response.json -2> ( 43%) Resolving: self/v1/schemas/mcp/prm/response.json -2> ( 45%) Resolving: self/v1/schemas/mcp/request.json -2> ( 46%) Resolving: self/v1/schemas/mcp/resources/list/request.json -2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/response.json -2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/request.json -2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/response.json -2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json -2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json -2> ( 56%) Resolving: self/v1/schemas/mcp/response.json -2> ( 57%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json -2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json -2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json -2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json -2> ( 64%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json -2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json -2> ( 67%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json -2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json -2> ( 70%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json -2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json -2> ( 73%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json +2> ( 7%) Resolving: self/v1/schemas/api/playground/schemas/trace/request.json +2> ( 9%) Resolving: self/v1/schemas/api/playground/schemas/trace/response.json +2> ( 10%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json +2> ( 12%) Resolving: self/v1/schemas/api/schemas/dependents/response.json +2> ( 13%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json +2> ( 15%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json +2> ( 16%) Resolving: self/v1/schemas/api/schemas/health/response.json +2> ( 18%) Resolving: self/v1/schemas/api/schemas/locations/response.json +2> ( 19%) Resolving: self/v1/schemas/api/schemas/metadata/response.json +2> ( 21%) Resolving: self/v1/schemas/api/schemas/output-error.json +2> ( 22%) Resolving: self/v1/schemas/api/schemas/position.json +2> ( 24%) Resolving: self/v1/schemas/api/schemas/positions/response.json +2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/request.json +2> ( 27%) Resolving: self/v1/schemas/api/schemas/rdf/response.json +2> ( 28%) Resolving: self/v1/schemas/api/schemas/search/response.json +2> ( 30%) Resolving: self/v1/schemas/api/schemas/stats/response.json +2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/request.json +2> ( 33%) Resolving: self/v1/schemas/api/schemas/trace/response.json +2> ( 34%) Resolving: self/v1/schemas/mcp/error.json +2> ( 36%) Resolving: self/v1/schemas/mcp/initialize/request.json +2> ( 37%) Resolving: self/v1/schemas/mcp/initialize/response.json +2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json +2> ( 40%) Resolving: self/v1/schemas/mcp/notifications/initialized.json +2> ( 42%) Resolving: self/v1/schemas/mcp/ping/request.json +2> ( 43%) Resolving: self/v1/schemas/mcp/ping/response.json +2> ( 45%) Resolving: self/v1/schemas/mcp/prm/response.json +2> ( 46%) Resolving: self/v1/schemas/mcp/request.json +2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/request.json +2> ( 50%) Resolving: self/v1/schemas/mcp/resources/list/response.json +2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/request.json +2> ( 53%) Resolving: self/v1/schemas/mcp/resources/read/response.json +2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json +2> ( 56%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json +2> ( 57%) Resolving: self/v1/schemas/mcp/response.json +2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json +2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json +2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json +2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json +2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json +2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json +2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json +2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json +2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json +2> ( 72%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json +2> ( 74%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json 2> ( 75%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json -2> ( 76%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json +2> ( 77%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json 2> ( 78%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json -2> ( 79%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json +2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json 2> ( 81%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json -2> ( 82%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json +2> ( 83%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json 2> ( 84%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json -2> ( 85%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json +2> ( 86%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json 2> ( 87%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/response.json 2> ( 89%) Resolving: self/v1/schemas/mcp/tools/call/request.json 2> ( 90%) Resolving: self/v1/schemas/mcp/tools/call/response.json @@ -165,15 +169,17 @@ WRITE expected.txt UNTIL EOF 2> ( 0%) Producing: explorer/public/%/login.metapack 2> ( 0%) Producing: schemas/example/schemas/old/%/schema.metapack 2> ( 0%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack +2> ( 0%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/position/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/schema.metapack @@ -182,7 +188,7 @@ WRITE expected.txt UNTIL EOF 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/schema.metapack @@ -217,7 +223,7 @@ WRITE expected.txt UNTIL EOF 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack -2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack +2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/schema.metapack @@ -226,7 +232,7 @@ WRITE expected.txt UNTIL EOF 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/schema.metapack -2> ( 8%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack +2> ( 7%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/schema.metapack 2> ( 8%) Producing: explorer/public/%/login-html.metapack 2> ( 8%) Producing: schemas/example/schemas/old/%/dependencies.metapack 2> ( 8%) Producing: schemas/example/schemas/old/%/locations.metapack @@ -235,7 +241,7 @@ WRITE expected.txt UNTIL EOF 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/dependencies.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/locations.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/positions.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack +2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/dependencies.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/positions.metapack @@ -244,136 +250,144 @@ WRITE expected.txt UNTIL EOF 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/positions.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/positions.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/stats.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/stats.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/dependencies.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/dependencies.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/locations.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/positions.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependencies.metapack @@ -381,8 +395,8 @@ WRITE expected.txt UNTIL EOF 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/locations.metapack @@ -390,8 +404,8 @@ WRITE expected.txt UNTIL EOF 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/positions.metapack @@ -399,7 +413,7 @@ WRITE expected.txt UNTIL EOF 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/positions.metapack @@ -408,7 +422,7 @@ WRITE expected.txt UNTIL EOF 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/positions.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/stats.metapack @@ -417,7 +431,7 @@ WRITE expected.txt UNTIL EOF 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/stats.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack -2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack +2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependencies.metapack @@ -426,7 +440,7 @@ WRITE expected.txt UNTIL EOF 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependencies.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack -2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack +2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependencies.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/locations.metapack @@ -461,7 +475,7 @@ WRITE expected.txt UNTIL EOF 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/positions.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/stats.metapack 2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependencies.metapack -2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack +2> ( 34%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/locations.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/positions.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/dependencies.metapack @@ -470,7 +484,7 @@ WRITE expected.txt UNTIL EOF 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/dependencies.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/locations.metapack -2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack +2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/locations.metapack @@ -479,7 +493,7 @@ WRITE expected.txt UNTIL EOF 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack -2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack +2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/dependencies.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/locations.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/positions.metapack @@ -487,15 +501,19 @@ WRITE expected.txt UNTIL EOF 2> ( 37%) Producing: schemas/example/schemas/old/%/bundle.metapack 2> ( 37%) Producing: schemas/example/schemas/old/%/health.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/bundle.metapack @@ -503,8 +521,8 @@ WRITE expected.txt UNTIL EOF 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/health.metapack @@ -512,8 +530,8 @@ WRITE expected.txt UNTIL EOF 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/bundle.metapack @@ -521,7 +539,7 @@ WRITE expected.txt UNTIL EOF 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/error/%/bundle.metapack @@ -530,7 +548,7 @@ WRITE expected.txt UNTIL EOF 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/health.metapack @@ -539,7 +557,7 @@ WRITE expected.txt UNTIL EOF 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack -2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack +2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/bundle.metapack @@ -583,7 +601,7 @@ WRITE expected.txt UNTIL EOF 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack -2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack +2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/bundle.metapack @@ -592,7 +610,7 @@ WRITE expected.txt UNTIL EOF 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack -2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack +2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/health.metapack @@ -601,7 +619,7 @@ WRITE expected.txt UNTIL EOF 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack -2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack +2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/bundle.metapack @@ -609,13 +627,15 @@ WRITE expected.txt UNTIL EOF 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/health.metapack 2> ( 52%) Producing: explorer/public/example/schemas/old/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/error/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack @@ -644,7 +664,7 @@ WRITE expected.txt UNTIL EOF 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack -2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack +2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema.metapack @@ -653,7 +673,7 @@ WRITE expected.txt UNTIL EOF 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema.metapack @@ -662,7 +682,7 @@ WRITE expected.txt UNTIL EOF 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema.metapack @@ -670,8 +690,8 @@ WRITE expected.txt UNTIL EOF 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema.metapack @@ -679,8 +699,8 @@ WRITE expected.txt UNTIL EOF 2> ( 59%) Producing: schemas/example/schemas/old/%/blaze-exhaustive.metapack 2> ( 59%) Producing: schemas/example/schemas/old/%/blaze-fast.metapack 2> ( 59%) Producing: schemas/example/schemas/old/%/editor.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-fast.metapack @@ -688,49 +708,55 @@ WRITE expected.txt UNTIL EOF 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-exhaustive.metapack @@ -738,8 +764,8 @@ WRITE expected.txt UNTIL EOF 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/blaze-exhaustive.metapack @@ -747,8 +773,8 @@ WRITE expected.txt UNTIL EOF 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/blaze-exhaustive.metapack @@ -756,7 +782,7 @@ WRITE expected.txt UNTIL EOF 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack -2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack +2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/editor.metapack @@ -765,7 +791,7 @@ WRITE expected.txt UNTIL EOF 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack -2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack +2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-fast.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/editor.metapack @@ -774,7 +800,7 @@ WRITE expected.txt UNTIL EOF 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-fast.metapack -2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack +2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-fast.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/editor.metapack @@ -783,7 +809,7 @@ WRITE expected.txt UNTIL EOF 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/blaze-fast.metapack -2> ( 71%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack +2> ( 72%) Producing: schemas/self/v1/schemas/mcp/response/%/editor.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-exhaustive.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/blaze-fast.metapack 2> ( 72%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/editor.metapack @@ -818,7 +844,7 @@ WRITE expected.txt UNTIL EOF 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/editor.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack -2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack +2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-fast.metapack @@ -827,7 +853,7 @@ WRITE expected.txt UNTIL EOF 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack -2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack +2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-fast.metapack @@ -836,7 +862,7 @@ WRITE expected.txt UNTIL EOF 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-fast.metapack @@ -845,7 +871,7 @@ WRITE expected.txt UNTIL EOF 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-fast.metapack @@ -853,8 +879,8 @@ WRITE expected.txt UNTIL EOF 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-fast.metapack @@ -862,8 +888,8 @@ WRITE expected.txt UNTIL EOF 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-fast.metapack @@ -871,10 +897,13 @@ WRITE expected.txt UNTIL EOF 2> ( 81%) Producing: explorer/public/example/schemas/%/directory.metapack 2> ( 81%) Producing: explorer/public/example/schemas/old/%/schema-html.metapack 2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory.metapack @@ -914,7 +943,7 @@ WRITE expected.txt UNTIL EOF 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack -2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack +2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema-html.metapack @@ -923,7 +952,7 @@ WRITE expected.txt UNTIL EOF 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/schema-html.metapack @@ -932,7 +961,7 @@ WRITE expected.txt UNTIL EOF 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema-html.metapack @@ -940,8 +969,8 @@ WRITE expected.txt UNTIL EOF 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema-html.metapack @@ -949,8 +978,8 @@ WRITE expected.txt UNTIL EOF 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema-html.metapack @@ -958,8 +987,8 @@ WRITE expected.txt UNTIL EOF 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema-html.metapack @@ -967,15 +996,17 @@ WRITE expected.txt UNTIL EOF 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/example/%/directory.metapack -2> ( 93%) Producing: explorer/public/example/schemas/%/directory-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack +2> ( 92%) Producing: explorer/public/example/schemas/%/directory-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/list/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/positions/%/directory-html.metapack @@ -984,7 +1015,7 @@ WRITE expected.txt UNTIL EOF 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/ping/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory-html.metapack @@ -993,7 +1024,7 @@ WRITE expected.txt UNTIL EOF 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory-html.metapack @@ -1001,24 +1032,27 @@ WRITE expected.txt UNTIL EOF 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/example/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 99%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/v1/%/directory.metapack 2> ( 99%) Producing: explorer/public/self/v1/schemas/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/%/directory.metapack @@ -1032,57 +1066,59 @@ WRITE expected.txt UNTIL EOF 2> ( 3%) Combining: explorer/public/self/v1/schemas/api/auth/login/response/%/dependents.metapack 2> ( 4%) Combining: explorer/public/self/v1/schemas/api/error/%/dependents.metapack 2> ( 6%) Combining: explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack -2> ( 7%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack -2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack -2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack -2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack -2> ( 14%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack -2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack -2> ( 17%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack -2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack -2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack -2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack -2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack -2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack -2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack -2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack -2> ( 29%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack -2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack -2> ( 32%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack -2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack -2> ( 35%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack -2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack -2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack -2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack -2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack -2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack -2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack -2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack -2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack -2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack -2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack -2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack -2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack -2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack -2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack -2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack -2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack -2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack -2> ( 64%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack -2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack -2> ( 67%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack -2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack -2> ( 70%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack -2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack -2> ( 73%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack +2> ( 7%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +2> ( 9%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack +2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack +2> ( 13%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack +2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack +2> ( 16%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack +2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack +2> ( 19%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack +2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack +2> ( 22%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack +2> ( 24%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack +2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack +2> ( 27%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack +2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack +2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack +2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack +2> ( 33%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack +2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack +2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack +2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack +2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack +2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack +2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack +2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack +2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack +2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack +2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack +2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack +2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack +2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack +2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack +2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack +2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack +2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack +2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack +2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack +2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack +2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack +2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack +2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack +2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack +2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack +2> ( 72%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack +2> ( 74%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack 2> ( 75%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack -2> ( 76%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack +2> ( 77%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack 2> ( 78%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack -2> ( 79%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack +2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack 2> ( 81%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack -2> ( 82%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack +2> ( 83%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack 2> ( 84%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/dependents.metapack -2> ( 85%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack +2> ( 86%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack 2> ( 87%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/dependents.metapack 2> ( 89%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack 2> ( 90%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/response/%/dependents.metapack @@ -1149,66 +1185,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> (100%) Resolving: example/schemas/test.json 2> ( 4%) Producing: schemas/example/schemas/new/%/schema.metapack 2> ( 9%) Producing: schemas/example/schemas/new/%/dependencies.metapack diff --git a/test/cli/index/common/rebuild-modify-cache.clitest b/test/cli/index/common/rebuild-modify-cache.clitest index e66700c1e..08c23a179 100644 --- a/test/cli/index/common/rebuild-modify-cache.clitest +++ b/test/cli/index/common/rebuild-modify-cache.clitest @@ -69,66 +69,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) EOF REPLACE $CWD WITH '[CWD]' IN output.txt diff --git a/test/cli/index/common/rebuild-one-to-zero.clitest b/test/cli/index/common/rebuild-one-to-zero.clitest index d660b51d5..032dd19a1 100644 --- a/test/cli/index/common/rebuild-one-to-zero.clitest +++ b/test/cli/index/common/rebuild-one-to-zero.clitest @@ -30,121 +30,125 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> ( 1%) Resolving: schemas/test.json 2> ( 3%) Resolving: self/v1/schemas/api/auth/login/response.json 2> ( 4%) Resolving: self/v1/schemas/api/error.json 2> ( 6%) Resolving: self/v1/schemas/api/list/response.json -2> ( 7%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json -2> ( 9%) Resolving: self/v1/schemas/api/schemas/dependents/response.json -2> ( 10%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json -2> ( 12%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json -2> ( 14%) Resolving: self/v1/schemas/api/schemas/health/response.json -2> ( 15%) Resolving: self/v1/schemas/api/schemas/locations/response.json -2> ( 17%) Resolving: self/v1/schemas/api/schemas/metadata/response.json -2> ( 18%) Resolving: self/v1/schemas/api/schemas/output-error.json -2> ( 20%) Resolving: self/v1/schemas/api/schemas/position.json -2> ( 21%) Resolving: self/v1/schemas/api/schemas/positions/response.json -2> ( 23%) Resolving: self/v1/schemas/api/schemas/rdf/request.json -2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/response.json -2> ( 26%) Resolving: self/v1/schemas/api/schemas/search/response.json -2> ( 28%) Resolving: self/v1/schemas/api/schemas/stats/response.json -2> ( 29%) Resolving: self/v1/schemas/api/schemas/trace/request.json -2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/response.json -2> ( 32%) Resolving: self/v1/schemas/mcp/error.json -2> ( 34%) Resolving: self/v1/schemas/mcp/initialize/request.json -2> ( 35%) Resolving: self/v1/schemas/mcp/initialize/response.json -2> ( 37%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json -2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/initialized.json -2> ( 40%) Resolving: self/v1/schemas/mcp/ping/request.json -2> ( 42%) Resolving: self/v1/schemas/mcp/ping/response.json -2> ( 43%) Resolving: self/v1/schemas/mcp/prm/response.json -2> ( 45%) Resolving: self/v1/schemas/mcp/request.json -2> ( 46%) Resolving: self/v1/schemas/mcp/resources/list/request.json -2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/response.json -2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/request.json -2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/response.json -2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json -2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json -2> ( 56%) Resolving: self/v1/schemas/mcp/response.json -2> ( 57%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json -2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json -2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json -2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json -2> ( 64%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json -2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json -2> ( 67%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json -2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json -2> ( 70%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json -2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json -2> ( 73%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json +2> ( 7%) Resolving: self/v1/schemas/api/playground/schemas/trace/request.json +2> ( 9%) Resolving: self/v1/schemas/api/playground/schemas/trace/response.json +2> ( 10%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json +2> ( 12%) Resolving: self/v1/schemas/api/schemas/dependents/response.json +2> ( 13%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json +2> ( 15%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json +2> ( 16%) Resolving: self/v1/schemas/api/schemas/health/response.json +2> ( 18%) Resolving: self/v1/schemas/api/schemas/locations/response.json +2> ( 19%) Resolving: self/v1/schemas/api/schemas/metadata/response.json +2> ( 21%) Resolving: self/v1/schemas/api/schemas/output-error.json +2> ( 22%) Resolving: self/v1/schemas/api/schemas/position.json +2> ( 24%) Resolving: self/v1/schemas/api/schemas/positions/response.json +2> ( 25%) Resolving: self/v1/schemas/api/schemas/rdf/request.json +2> ( 27%) Resolving: self/v1/schemas/api/schemas/rdf/response.json +2> ( 28%) Resolving: self/v1/schemas/api/schemas/search/response.json +2> ( 30%) Resolving: self/v1/schemas/api/schemas/stats/response.json +2> ( 31%) Resolving: self/v1/schemas/api/schemas/trace/request.json +2> ( 33%) Resolving: self/v1/schemas/api/schemas/trace/response.json +2> ( 34%) Resolving: self/v1/schemas/mcp/error.json +2> ( 36%) Resolving: self/v1/schemas/mcp/initialize/request.json +2> ( 37%) Resolving: self/v1/schemas/mcp/initialize/response.json +2> ( 39%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json +2> ( 40%) Resolving: self/v1/schemas/mcp/notifications/initialized.json +2> ( 42%) Resolving: self/v1/schemas/mcp/ping/request.json +2> ( 43%) Resolving: self/v1/schemas/mcp/ping/response.json +2> ( 45%) Resolving: self/v1/schemas/mcp/prm/response.json +2> ( 46%) Resolving: self/v1/schemas/mcp/request.json +2> ( 48%) Resolving: self/v1/schemas/mcp/resources/list/request.json +2> ( 50%) Resolving: self/v1/schemas/mcp/resources/list/response.json +2> ( 51%) Resolving: self/v1/schemas/mcp/resources/read/request.json +2> ( 53%) Resolving: self/v1/schemas/mcp/resources/read/response.json +2> ( 54%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json +2> ( 56%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json +2> ( 57%) Resolving: self/v1/schemas/mcp/response.json +2> ( 59%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json +2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json +2> ( 62%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json +2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json +2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json +2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json +2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json +2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json +2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json +2> ( 72%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json +2> ( 74%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json 2> ( 75%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json -2> ( 76%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json +2> ( 77%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json 2> ( 78%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json -2> ( 79%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json +2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json 2> ( 81%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json -2> ( 82%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json +2> ( 83%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json 2> ( 84%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json -2> ( 85%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json +2> ( 86%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json 2> ( 87%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/response.json 2> ( 89%) Resolving: self/v1/schemas/mcp/tools/call/request.json 2> ( 90%) Resolving: self/v1/schemas/mcp/tools/call/response.json @@ -164,13 +168,15 @@ WRITE expected.txt UNTIL EOF 2> ( 0%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/position/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/schema.metapack @@ -178,8 +184,8 @@ WRITE expected.txt UNTIL EOF 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/schema.metapack @@ -187,7 +193,7 @@ WRITE expected.txt UNTIL EOF 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/schema.metapack -2> ( 3%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/schema.metapack +2> ( 4%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/request/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/schema.metapack @@ -196,7 +202,7 @@ WRITE expected.txt UNTIL EOF 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/response/%/schema.metapack -2> ( 4%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/schema.metapack +2> ( 5%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/schema.metapack 2> ( 5%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/schema.metapack 2> ( 5%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack 2> ( 5%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack @@ -205,7 +211,7 @@ WRITE expected.txt UNTIL EOF 2> ( 5%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 5%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack 2> ( 5%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema.metapack -2> ( 5%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema.metapack +2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack 2> ( 6%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack @@ -240,145 +246,153 @@ WRITE expected.txt UNTIL EOF 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/dependencies.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/stats.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/dependencies.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/locations.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/dependencies.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/positions.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/locations.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/stats.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/positions.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/dependencies.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/locations.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/positions.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependencies.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/locations.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/stats.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependencies.metapack @@ -386,8 +400,8 @@ WRITE expected.txt UNTIL EOF 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependencies.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/locations.metapack @@ -395,8 +409,8 @@ WRITE expected.txt UNTIL EOF 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/locations.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/positions.metapack @@ -404,8 +418,8 @@ WRITE expected.txt UNTIL EOF 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/positions.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/stats.metapack @@ -413,7 +427,7 @@ WRITE expected.txt UNTIL EOF 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/stats.metapack -2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack +2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/stats.metapack @@ -422,7 +436,7 @@ WRITE expected.txt UNTIL EOF 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependencies.metapack -2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack +2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependencies.metapack @@ -431,7 +445,7 @@ WRITE expected.txt UNTIL EOF 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependencies.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/locations.metapack -2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/positions.metapack +2> ( 32%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/positions.metapack 2> ( 32%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/stats.metapack 2> ( 32%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependencies.metapack 2> ( 32%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/locations.metapack @@ -466,7 +480,7 @@ WRITE expected.txt UNTIL EOF 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/positions.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/dependencies.metapack -2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/locations.metapack +2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/locations.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/dependencies.metapack @@ -475,7 +489,7 @@ WRITE expected.txt UNTIL EOF 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack -2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack +2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/dependencies.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/locations.metapack @@ -484,14 +498,18 @@ WRITE expected.txt UNTIL EOF 2> ( 37%) Producing: schemas/schemas/test/%/bundle.metapack 2> ( 37%) Producing: schemas/schemas/test/%/health.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/health.metapack @@ -499,8 +517,8 @@ WRITE expected.txt UNTIL EOF 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/health.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/bundle.metapack @@ -508,8 +526,8 @@ WRITE expected.txt UNTIL EOF 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/bundle.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/health.metapack @@ -517,7 +535,7 @@ WRITE expected.txt UNTIL EOF 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/health.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/health.metapack @@ -526,7 +544,7 @@ WRITE expected.txt UNTIL EOF 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/bundle.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/bundle.metapack @@ -535,7 +553,7 @@ WRITE expected.txt UNTIL EOF 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/health.metapack -2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack +2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/health.metapack @@ -544,7 +562,7 @@ WRITE expected.txt UNTIL EOF 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/bundle.metapack -2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/health.metapack +2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/health.metapack 2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/bundle.metapack 2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/health.metapack 2> ( 45%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/bundle.metapack @@ -579,7 +597,7 @@ WRITE expected.txt UNTIL EOF 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/health.metapack -2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack +2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/health.metapack @@ -588,7 +606,7 @@ WRITE expected.txt UNTIL EOF 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack -2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack +2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/bundle.metapack @@ -597,7 +615,7 @@ WRITE expected.txt UNTIL EOF 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack -2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack +2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/health.metapack @@ -605,14 +623,16 @@ WRITE expected.txt UNTIL EOF 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/health.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/health.metapack 2> ( 52%) Producing: explorer/public/schemas/test/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/error/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack @@ -631,7 +651,7 @@ WRITE expected.txt UNTIL EOF 2> ( 54%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 54%) Producing: explorer/public/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 54%) Producing: explorer/public/self/v1/schemas/mcp/initialize/request/%/schema.metapack -2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/initialize/response/%/schema.metapack +2> ( 54%) Producing: explorer/public/self/v1/schemas/mcp/initialize/response/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/ping/request/%/schema.metapack @@ -640,7 +660,7 @@ WRITE expected.txt UNTIL EOF 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema.metapack -2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack +2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack @@ -649,7 +669,7 @@ WRITE expected.txt UNTIL EOF 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack @@ -658,7 +678,7 @@ WRITE expected.txt UNTIL EOF 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack @@ -666,8 +686,8 @@ WRITE expected.txt UNTIL EOF 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack @@ -675,8 +695,8 @@ WRITE expected.txt UNTIL EOF 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema.metapack 2> ( 59%) Producing: schemas/schemas/test/%/blaze-exhaustive.metapack 2> ( 59%) Producing: schemas/schemas/test/%/blaze-fast.metapack -2> ( 60%) Producing: schemas/schemas/test/%/editor.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack +2> ( 59%) Producing: schemas/schemas/test/%/editor.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-exhaustive.metapack @@ -684,40 +704,46 @@ WRITE expected.txt UNTIL EOF 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-exhaustive.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-exhaustive.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-exhaustive.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-exhaustive.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/editor.metapack @@ -725,8 +751,8 @@ WRITE expected.txt UNTIL EOF 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-exhaustive.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/editor.metapack @@ -734,8 +760,8 @@ WRITE expected.txt UNTIL EOF 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-exhaustive.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/editor.metapack @@ -743,7 +769,7 @@ WRITE expected.txt UNTIL EOF 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-exhaustive.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-fast.metapack @@ -752,7 +778,7 @@ WRITE expected.txt UNTIL EOF 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-exhaustive.metapack -2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack +2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-fast.metapack @@ -761,7 +787,7 @@ WRITE expected.txt UNTIL EOF 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-exhaustive.metapack -2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack +2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-fast.metapack @@ -805,7 +831,7 @@ WRITE expected.txt UNTIL EOF 2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/blaze-exhaustive.metapack 2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/blaze-fast.metapack 2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/editor.metapack -2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/blaze-exhaustive.metapack +2> ( 74%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/blaze-exhaustive.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/editor.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/blaze-exhaustive.metapack @@ -814,7 +840,7 @@ WRITE expected.txt UNTIL EOF 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-exhaustive.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/editor.metapack -2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack +2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-exhaustive.metapack @@ -823,7 +849,7 @@ WRITE expected.txt UNTIL EOF 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/editor.metapack -2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack +2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-exhaustive.metapack @@ -831,8 +857,8 @@ WRITE expected.txt UNTIL EOF 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-fast.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-exhaustive.metapack @@ -840,8 +866,8 @@ WRITE expected.txt UNTIL EOF 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-fast.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-exhaustive.metapack @@ -849,29 +875,32 @@ WRITE expected.txt UNTIL EOF 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-exhaustive.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/editor.metapack 2> ( 81%) Producing: explorer/public/schemas/%/directory.metapack -2> ( 82%) Producing: explorer/public/schemas/test/%/schema-html.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/schemas/test/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory.metapack @@ -883,7 +912,7 @@ WRITE expected.txt UNTIL EOF 2> ( 83%) Producing: explorer/public/self/v1/schemas/api/schemas/health/response/%/schema-html.metapack 2> ( 83%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory.metapack 2> ( 83%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/response/%/schema-html.metapack -2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory.metapack +2> ( 83%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/schema-html.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/output-error/%/schema-html.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/position/%/schema-html.metapack @@ -892,7 +921,7 @@ WRITE expected.txt UNTIL EOF 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/rdf/%/directory.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/schema-html.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/schema-html.metapack -2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/search/%/directory.metapack +2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/search/%/directory.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/search/response/%/schema-html.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/response/%/schema-html.metapack @@ -901,7 +930,7 @@ WRITE expected.txt UNTIL EOF 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/response/%/schema-html.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/mcp/error/%/schema-html.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory.metapack -2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/initialize/request/%/schema-html.metapack +2> ( 85%) Producing: explorer/public/self/v1/schemas/mcp/initialize/request/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/initialize/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/schema-html.metapack @@ -910,7 +939,7 @@ WRITE expected.txt UNTIL EOF 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/request/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory.metapack -2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack +2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema-html.metapack @@ -918,8 +947,8 @@ WRITE expected.txt UNTIL EOF 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema-html.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory.metapack @@ -927,8 +956,8 @@ WRITE expected.txt UNTIL EOF 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema-html.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory.metapack @@ -936,42 +965,44 @@ WRITE expected.txt UNTIL EOF 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack -2> ( 93%) Producing: explorer/public/schemas/%/directory-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack +2> ( 92%) Producing: explorer/public/schemas/%/directory-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/list/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/positions/%/directory-html.metapack @@ -979,8 +1010,8 @@ WRITE expected.txt UNTIL EOF 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/search/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/ping/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory-html.metapack @@ -988,31 +1019,34 @@ WRITE expected.txt UNTIL EOF 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/v1/%/directory.metapack 2> ( 99%) Producing: explorer/public/self/v1/schemas/%/directory-html.metapack @@ -1027,57 +1061,59 @@ WRITE expected.txt UNTIL EOF 2> ( 3%) Combining: explorer/public/self/v1/schemas/api/auth/login/response/%/dependents.metapack 2> ( 4%) Combining: explorer/public/self/v1/schemas/api/error/%/dependents.metapack 2> ( 6%) Combining: explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack -2> ( 7%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack -2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack -2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack -2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack -2> ( 14%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack -2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack -2> ( 17%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack -2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack -2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack -2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack -2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack -2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack -2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack -2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack -2> ( 29%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack -2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack -2> ( 32%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack -2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack -2> ( 35%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack -2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack -2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack -2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack -2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack -2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack -2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack -2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack -2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack -2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack -2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack -2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack -2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack -2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack -2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack -2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack -2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack -2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack -2> ( 64%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack -2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack -2> ( 67%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack -2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack -2> ( 70%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack -2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack -2> ( 73%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack +2> ( 7%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +2> ( 9%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack +2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack +2> ( 13%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack +2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack +2> ( 16%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack +2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack +2> ( 19%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack +2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack +2> ( 22%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack +2> ( 24%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack +2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack +2> ( 27%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack +2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack +2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack +2> ( 31%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack +2> ( 33%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack +2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack +2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack +2> ( 37%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack +2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack +2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack +2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack +2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack +2> ( 45%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack +2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack +2> ( 48%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack +2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack +2> ( 51%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack +2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack +2> ( 54%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack +2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack +2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack +2> ( 59%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack +2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack +2> ( 62%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack +2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack +2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack +2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack +2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack +2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack +2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack +2> ( 72%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack +2> ( 74%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack 2> ( 75%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack -2> ( 76%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack +2> ( 77%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack 2> ( 78%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack -2> ( 79%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack +2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack 2> ( 81%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack -2> ( 82%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack +2> ( 83%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack 2> ( 84%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/dependents.metapack -2> ( 85%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack +2> ( 86%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack 2> ( 87%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/dependents.metapack 2> ( 89%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack 2> ( 90%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/response/%/dependents.metapack @@ -1159,6 +1195,28 @@ WRITE expected_manifest.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -1665,6 +1723,33 @@ WRITE expected_manifest.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response @@ -2439,66 +2524,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#1) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#3) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#4) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#65) 2> ( 16%) Producing: explorer/public/%/directory.metapack 2> ( 33%) Producing: explorer/public/%/directory-html.metapack 2> ( 50%) Producing: explorer/public/%/search.metapack @@ -2568,6 +2655,28 @@ WRITE expected_manifest.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -3061,6 +3170,33 @@ WRITE expected_manifest.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/rebuild-to-empty.clitest b/test/cli/index/common/rebuild-to-empty.clitest index bc7b09370..7df89f6c6 100644 --- a/test/cli/index/common/rebuild-to-empty.clitest +++ b/test/cli/index/common/rebuild-to-empty.clitest @@ -118,6 +118,28 @@ WRITE new-expected.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -611,6 +633,33 @@ WRITE new-expected.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/rebuild-two-to-three.clitest b/test/cli/index/common/rebuild-two-to-three.clitest index d6d7baf8d..6a16d3dd0 100644 --- a/test/cli/index/common/rebuild-two-to-three.clitest +++ b/test/cli/index/common/rebuild-two-to-three.clitest @@ -165,6 +165,28 @@ WRITE expected_manifest.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -696,6 +718,33 @@ WRITE expected_manifest.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/rebuild-zero-to-one.clitest b/test/cli/index/common/rebuild-zero-to-one.clitest index d5e8e60bc..0cb367506 100644 --- a/test/cli/index/common/rebuild-zero-to-one.clitest +++ b/test/cli/index/common/rebuild-zero-to-one.clitest @@ -26,122 +26,126 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#1) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#3) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#4) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#65) 2> ( 1%) Resolving: self/v1/schemas/api/auth/login/response.json 2> ( 3%) Resolving: self/v1/schemas/api/error.json 2> ( 4%) Resolving: self/v1/schemas/api/list/response.json -2> ( 6%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json -2> ( 7%) Resolving: self/v1/schemas/api/schemas/dependents/response.json -2> ( 9%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json -2> ( 11%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json -2> ( 12%) Resolving: self/v1/schemas/api/schemas/health/response.json -2> ( 14%) Resolving: self/v1/schemas/api/schemas/locations/response.json -2> ( 15%) Resolving: self/v1/schemas/api/schemas/metadata/response.json -2> ( 17%) Resolving: self/v1/schemas/api/schemas/output-error.json -2> ( 19%) Resolving: self/v1/schemas/api/schemas/position.json -2> ( 20%) Resolving: self/v1/schemas/api/schemas/positions/response.json -2> ( 22%) Resolving: self/v1/schemas/api/schemas/rdf/request.json -2> ( 23%) Resolving: self/v1/schemas/api/schemas/rdf/response.json -2> ( 25%) Resolving: self/v1/schemas/api/schemas/search/response.json -2> ( 26%) Resolving: self/v1/schemas/api/schemas/stats/response.json -2> ( 28%) Resolving: self/v1/schemas/api/schemas/trace/request.json -2> ( 30%) Resolving: self/v1/schemas/api/schemas/trace/response.json -2> ( 31%) Resolving: self/v1/schemas/mcp/error.json -2> ( 33%) Resolving: self/v1/schemas/mcp/initialize/request.json -2> ( 34%) Resolving: self/v1/schemas/mcp/initialize/response.json -2> ( 36%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json -2> ( 38%) Resolving: self/v1/schemas/mcp/notifications/initialized.json -2> ( 39%) Resolving: self/v1/schemas/mcp/ping/request.json -2> ( 41%) Resolving: self/v1/schemas/mcp/ping/response.json -2> ( 42%) Resolving: self/v1/schemas/mcp/prm/response.json -2> ( 44%) Resolving: self/v1/schemas/mcp/request.json -2> ( 46%) Resolving: self/v1/schemas/mcp/resources/list/request.json -2> ( 47%) Resolving: self/v1/schemas/mcp/resources/list/response.json -2> ( 49%) Resolving: self/v1/schemas/mcp/resources/read/request.json -2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/response.json -2> ( 52%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json -2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json -2> ( 55%) Resolving: self/v1/schemas/mcp/response.json -2> ( 57%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json -2> ( 58%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json -2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json -2> ( 61%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json -2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json -2> ( 65%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json -2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json -2> ( 68%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json -2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json -2> ( 71%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json +2> ( 6%) Resolving: self/v1/schemas/api/playground/schemas/trace/request.json +2> ( 7%) Resolving: self/v1/schemas/api/playground/schemas/trace/response.json +2> ( 9%) Resolving: self/v1/schemas/api/schemas/dependencies/response.json +2> ( 10%) Resolving: self/v1/schemas/api/schemas/dependents/response.json +2> ( 12%) Resolving: self/v1/schemas/api/schemas/evaluate/request.json +2> ( 13%) Resolving: self/v1/schemas/api/schemas/evaluate/response.json +2> ( 15%) Resolving: self/v1/schemas/api/schemas/health/response.json +2> ( 16%) Resolving: self/v1/schemas/api/schemas/locations/response.json +2> ( 18%) Resolving: self/v1/schemas/api/schemas/metadata/response.json +2> ( 20%) Resolving: self/v1/schemas/api/schemas/output-error.json +2> ( 21%) Resolving: self/v1/schemas/api/schemas/position.json +2> ( 23%) Resolving: self/v1/schemas/api/schemas/positions/response.json +2> ( 24%) Resolving: self/v1/schemas/api/schemas/rdf/request.json +2> ( 26%) Resolving: self/v1/schemas/api/schemas/rdf/response.json +2> ( 27%) Resolving: self/v1/schemas/api/schemas/search/response.json +2> ( 29%) Resolving: self/v1/schemas/api/schemas/stats/response.json +2> ( 30%) Resolving: self/v1/schemas/api/schemas/trace/request.json +2> ( 32%) Resolving: self/v1/schemas/api/schemas/trace/response.json +2> ( 33%) Resolving: self/v1/schemas/mcp/error.json +2> ( 35%) Resolving: self/v1/schemas/mcp/initialize/request.json +2> ( 36%) Resolving: self/v1/schemas/mcp/initialize/response.json +2> ( 38%) Resolving: self/v1/schemas/mcp/notifications/cancelled.json +2> ( 40%) Resolving: self/v1/schemas/mcp/notifications/initialized.json +2> ( 41%) Resolving: self/v1/schemas/mcp/ping/request.json +2> ( 43%) Resolving: self/v1/schemas/mcp/ping/response.json +2> ( 44%) Resolving: self/v1/schemas/mcp/prm/response.json +2> ( 46%) Resolving: self/v1/schemas/mcp/request.json +2> ( 47%) Resolving: self/v1/schemas/mcp/resources/list/request.json +2> ( 49%) Resolving: self/v1/schemas/mcp/resources/list/response.json +2> ( 50%) Resolving: self/v1/schemas/mcp/resources/read/request.json +2> ( 52%) Resolving: self/v1/schemas/mcp/resources/read/response.json +2> ( 53%) Resolving: self/v1/schemas/mcp/resources/templates/list/request.json +2> ( 55%) Resolving: self/v1/schemas/mcp/resources/templates/list/response.json +2> ( 56%) Resolving: self/v1/schemas/mcp/response.json +2> ( 58%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/request.json +2> ( 60%) Resolving: self/v1/schemas/mcp/tools/call/evaluate-schema/response.json +2> ( 61%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json +2> ( 63%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json +2> ( 64%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json +2> ( 66%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json +2> ( 67%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/request.json +2> ( 69%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-health/response.json +2> ( 70%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/request.json +2> ( 72%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-locations/response.json 2> ( 73%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json -2> ( 74%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json +2> ( 75%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json 2> ( 76%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/request.json -2> ( 77%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json -2> ( 79%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json -2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json -2> ( 82%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json +2> ( 78%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-positions/response.json +2> ( 80%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/request.json +2> ( 81%) Resolving: self/v1/schemas/mcp/tools/call/get-schema-stats/response.json +2> ( 83%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json 2> ( 84%) Resolving: self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json -2> ( 85%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json +2> ( 86%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/request.json 2> ( 87%) Resolving: self/v1/schemas/mcp/tools/call/list-directory/response.json -2> ( 88%) Resolving: self/v1/schemas/mcp/tools/call/request.json +2> ( 89%) Resolving: self/v1/schemas/mcp/tools/call/request.json 2> ( 90%) Resolving: self/v1/schemas/mcp/tools/call/response.json 2> ( 92%) Resolving: self/v1/schemas/mcp/tools/call/search-schemas/request.json 2> ( 93%) Resolving: self/v1/schemas/mcp/tools/call/search-schemas/response.json @@ -158,14 +162,16 @@ WRITE expected.txt UNTIL EOF 2> ( 0%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 0%) Producing: schemas/self/v1/schemas/api/error/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 1%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/schema.metapack 2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack -2> ( 1%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/schema.metapack +2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/position/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/schema.metapack @@ -173,7 +179,7 @@ WRITE expected.txt UNTIL EOF 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/schema.metapack 2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/schema.metapack -2> ( 2%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack +2> ( 3%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/error/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/schema.metapack @@ -182,7 +188,7 @@ WRITE expected.txt UNTIL EOF 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/schema.metapack 2> ( 3%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/schema.metapack -2> ( 3%) Producing: schemas/self/v1/schemas/mcp/request/%/schema.metapack +2> ( 4%) Producing: schemas/self/v1/schemas/mcp/request/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/schema.metapack 2> ( 4%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/schema.metapack @@ -225,143 +231,151 @@ WRITE expected.txt UNTIL EOF 2> ( 8%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/stats.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/error/%/dependencies.metapack 2> ( 8%) Producing: schemas/self/v1/schemas/api/error/%/locations.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/positions.metapack +2> ( 8%) Producing: schemas/self/v1/schemas/api/error/%/positions.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/error/%/stats.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/dependencies.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/locations.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/positions.metapack 2> ( 9%) Producing: schemas/self/v1/schemas/api/list/response/%/stats.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack -2> ( 9%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +2> ( 9%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/dependencies.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/locations.metapack +2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/positions.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/stats.metapack 2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack -2> ( 10%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/stats.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/dependencies.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/locations.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/positions.metapack +2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/stats.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/dependencies.metapack 2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack -2> ( 11%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/stats.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/dependencies.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/locations.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/positions.metapack +2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/stats.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/dependencies.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/locations.metapack 2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack -2> ( 12%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/dependencies.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/locations.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/positions.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/stats.metapack +2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/dependencies.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/locations.metapack 2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack -2> ( 13%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/dependencies.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/locations.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/positions.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/position/%/stats.metapack +2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/dependencies.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/locations.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/positions.metapack 2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack -2> ( 14%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/locations.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/positions.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/stats.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/dependencies.metapack +2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/locations.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/positions.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/stats.metapack 2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack -2> ( 15%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/locations.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/positions.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/stats.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/dependencies.metapack +2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/locations.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/positions.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/stats.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/dependencies.metapack 2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack -2> ( 16%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/positions.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/stats.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/dependencies.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/locations.metapack +2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/positions.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/stats.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/dependencies.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/locations.metapack 2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/positions.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack -2> ( 17%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/error/%/stats.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/dependencies.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/locations.metapack +2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/stats.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/dependencies.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/locations.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/positions.metapack 2> ( 18%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/stats.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack -2> ( 18%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/dependencies.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/locations.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/positions.metapack +2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/stats.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/dependencies.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/locations.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/positions.metapack 2> ( 19%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/stats.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack -2> ( 19%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/dependencies.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/locations.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/positions.metapack +2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/dependencies.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/locations.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/positions.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/stats.metapack 2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/dependencies.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack -2> ( 20%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/locations.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/positions.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/stats.metapack +2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/locations.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/positions.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/request/%/stats.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/dependencies.metapack 2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/locations.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack -2> ( 21%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/positions.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/stats.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/dependencies.metapack +2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/positions.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/stats.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/dependencies.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/locations.metapack 2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/positions.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack -2> ( 22%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/stats.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/dependencies.metapack +2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/stats.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/dependencies.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/locations.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/positions.metapack 2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/stats.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack -2> ( 23%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/dependencies.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/locations.metapack +2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/dependencies.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/locations.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/positions.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/response/%/stats.metapack 2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependencies.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack -2> ( 24%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/locations.metapack +2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/positions.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependencies.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/locations.metapack @@ -369,16 +383,16 @@ WRITE expected.txt UNTIL EOF 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/stats.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependencies.metapack 2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/locations.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack -2> ( 25%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/positions.metapack +2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/locations.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/positions.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/stats.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependencies.metapack 2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/locations.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack -2> ( 26%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/positions.metapack +2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/stats.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/positions.metapack @@ -386,8 +400,8 @@ WRITE expected.txt UNTIL EOF 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependencies.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/locations.metapack 2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/positions.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack -2> ( 27%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/stats.metapack +2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependencies.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/positions.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/stats.metapack @@ -395,7 +409,7 @@ WRITE expected.txt UNTIL EOF 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/locations.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/positions.metapack 2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/stats.metapack -2> ( 28%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack +2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependencies.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/locations.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/stats.metapack @@ -404,7 +418,7 @@ WRITE expected.txt UNTIL EOF 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/positions.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/stats.metapack 2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependencies.metapack -2> ( 29%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack +2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/locations.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/positions.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependencies.metapack @@ -413,7 +427,7 @@ WRITE expected.txt UNTIL EOF 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/stats.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependencies.metapack 2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/locations.metapack -2> ( 30%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack +2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/positions.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/stats.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependencies.metapack 2> ( 31%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/locations.metapack @@ -456,7 +470,7 @@ WRITE expected.txt UNTIL EOF 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/positions.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/stats.metapack 2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/dependencies.metapack -2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/locations.metapack +2> ( 35%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/locations.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/positions.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/dependencies.metapack @@ -465,7 +479,7 @@ WRITE expected.txt UNTIL EOF 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/stats.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/dependencies.metapack 2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/locations.metapack -2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack +2> ( 36%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/positions.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/dependencies.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/locations.metapack @@ -473,23 +487,27 @@ WRITE expected.txt UNTIL EOF 2> ( 37%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/stats.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/bundle.metapack 2> ( 37%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/error/%/bundle.metapack +2> ( 37%) Producing: schemas/self/v1/schemas/api/error/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/list/response/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +2> ( 38%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/bundle.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/health.metapack 2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/bundle.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack -2> ( 38%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/health.metapack +2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/bundle.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/health.metapack 2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/bundle.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack -2> ( 39%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/health.metapack +2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/health.metapack @@ -497,8 +515,8 @@ WRITE expected.txt UNTIL EOF 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/position/%/health.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/bundle.metapack 2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/health.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack -2> ( 40%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/bundle.metapack +2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/bundle.metapack @@ -506,8 +524,8 @@ WRITE expected.txt UNTIL EOF 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/bundle.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/health.metapack 2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/bundle.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack -2> ( 41%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/health.metapack +2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/error/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/error/%/health.metapack @@ -515,7 +533,7 @@ WRITE expected.txt UNTIL EOF 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/health.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/bundle.metapack 2> ( 42%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/health.metapack -2> ( 42%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack +2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/health.metapack @@ -524,7 +542,7 @@ WRITE expected.txt UNTIL EOF 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/bundle.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/health.metapack 2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/bundle.metapack -2> ( 43%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack +2> ( 44%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/bundle.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/request/%/health.metapack 2> ( 44%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/bundle.metapack @@ -567,7 +585,7 @@ WRITE expected.txt UNTIL EOF 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/health.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/bundle.metapack 2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/health.metapack -2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack +2> ( 48%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/health.metapack @@ -576,7 +594,7 @@ WRITE expected.txt UNTIL EOF 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/bundle.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/health.metapack 2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/bundle.metapack -2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack +2> ( 49%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/bundle.metapack @@ -585,7 +603,7 @@ WRITE expected.txt UNTIL EOF 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/health.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/bundle.metapack 2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/health.metapack -2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack +2> ( 50%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/health.metapack @@ -593,13 +611,15 @@ WRITE expected.txt UNTIL EOF 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/health.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/bundle.metapack 2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/health.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack -2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/bundle.metapack +2> ( 51%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/health.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/bundle.metapack 2> ( 52%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/health.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/error/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +2> ( 52%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema.metapack 2> ( 52%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/schema.metapack 2> ( 53%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/schema.metapack @@ -627,7 +647,7 @@ WRITE expected.txt UNTIL EOF 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema.metapack 2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/response/%/schema.metapack -2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack +2> ( 55%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema.metapack @@ -636,7 +656,7 @@ WRITE expected.txt UNTIL EOF 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema.metapack 2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema.metapack -2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack +2> ( 56%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema.metapack @@ -644,8 +664,8 @@ WRITE expected.txt UNTIL EOF 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema.metapack 2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack -2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/schema.metapack +2> ( 57%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema.metapack @@ -653,57 +673,63 @@ WRITE expected.txt UNTIL EOF 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema.metapack 2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack -2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema.metapack +2> ( 58%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema.metapack 2> ( 59%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema.metapack 2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-exhaustive.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/blaze-fast.metapack +2> ( 59%) Producing: schemas/self/v1/schemas/api/auth/login/response/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/error/%/editor.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-exhaustive.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/blaze-fast.metapack 2> ( 60%) Producing: schemas/self/v1/schemas/api/list/response/%/editor.metapack -2> ( 60%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +2> ( 60%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependencies/response/%/editor.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-exhaustive.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/blaze-fast.metapack 2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/dependents/response/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack -2> ( 61%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-exhaustive.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/blaze-fast.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/request/%/editor.metapack +2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/evaluate/response/%/editor.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-exhaustive.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/blaze-fast.metapack 2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/health/response/%/editor.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack -2> ( 62%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-exhaustive.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/blaze-fast.metapack +2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/locations/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/metadata/response/%/editor.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-exhaustive.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/blaze-fast.metapack 2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/output-error/%/editor.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack -2> ( 63%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-exhaustive.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/blaze-fast.metapack +2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/position/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/positions/response/%/editor.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-exhaustive.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/blaze-fast.metapack 2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/request/%/editor.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack -2> ( 64%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-exhaustive.metapack +2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/rdf/response/%/editor.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/search/response/%/blaze-fast.metapack @@ -711,16 +737,16 @@ WRITE expected.txt UNTIL EOF 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-exhaustive.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/blaze-fast.metapack 2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/stats/response/%/editor.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack -2> ( 65%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-exhaustive.metapack +2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/request/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/blaze-fast.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/api/schemas/trace/response/%/editor.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-exhaustive.metapack 2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/blaze-fast.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack -2> ( 66%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/error/%/editor.metapack +2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/blaze-fast.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/request/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/blaze-exhaustive.metapack @@ -728,8 +754,8 @@ WRITE expected.txt UNTIL EOF 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/initialize/response/%/editor.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-exhaustive.metapack 2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/blaze-fast.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack -2> ( 67%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/cancelled/%/editor.metapack +2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/blaze-fast.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/notifications/initialized/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/blaze-exhaustive.metapack @@ -737,7 +763,7 @@ WRITE expected.txt UNTIL EOF 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/request/%/editor.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-exhaustive.metapack 2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/blaze-fast.metapack -2> ( 68%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack +2> ( 69%) Producing: schemas/self/v1/schemas/mcp/ping/response/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/blaze-fast.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/prm/response/%/editor.metapack @@ -746,7 +772,7 @@ WRITE expected.txt UNTIL EOF 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/request/%/editor.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-exhaustive.metapack 2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/blaze-fast.metapack -2> ( 69%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack +2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/blaze-fast.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/list/response/%/editor.metapack @@ -755,7 +781,7 @@ WRITE expected.txt UNTIL EOF 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/request/%/editor.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-exhaustive.metapack 2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/blaze-fast.metapack -2> ( 70%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack +2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/read/response/%/editor.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-exhaustive.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/blaze-fast.metapack 2> ( 71%) Producing: schemas/self/v1/schemas/mcp/resources/templates/list/request/%/editor.metapack @@ -798,7 +824,7 @@ WRITE expected.txt UNTIL EOF 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-exhaustive.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/blaze-fast.metapack 2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/editor.metapack -2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack +2> ( 75%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/editor.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/blaze-exhaustive.metapack @@ -807,7 +833,7 @@ WRITE expected.txt UNTIL EOF 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-exhaustive.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/blaze-fast.metapack 2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/editor.metapack -2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack +2> ( 76%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/blaze-fast.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/blaze-exhaustive.metapack @@ -815,8 +841,8 @@ WRITE expected.txt UNTIL EOF 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/editor.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-exhaustive.metapack 2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/blaze-fast.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack -2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/editor.metapack +2> ( 77%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/blaze-fast.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/blaze-exhaustive.metapack @@ -824,16 +850,16 @@ WRITE expected.txt UNTIL EOF 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/request/%/editor.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-exhaustive.metapack 2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/blaze-fast.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack -2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/list-directory/response/%/editor.metapack +2> ( 78%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/request/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-exhaustive.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/blaze-fast.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/response/%/editor.metapack 2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-exhaustive.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack -2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/blaze-fast.metapack +2> ( 79%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/request/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-exhaustive.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/search-schemas/response/%/editor.metapack @@ -841,8 +867,8 @@ WRITE expected.txt UNTIL EOF 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/blaze-fast.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/editor.metapack 2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-exhaustive.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack -2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/blaze-fast.metapack +2> ( 80%) Producing: schemas/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/editor.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-exhaustive.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/request/%/editor.metapack @@ -850,10 +876,13 @@ WRITE expected.txt UNTIL EOF 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/blaze-fast.metapack 2> ( 81%) Producing: schemas/self/v1/schemas/mcp/tools/list/response/%/editor.metapack 2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack -2> ( 82%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/auth/login/response/%/schema-html.metapack +2> ( 81%) Producing: explorer/public/self/v1/schemas/api/error/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +2> ( 82%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/schema-html.metapack 2> ( 82%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory.metapack @@ -875,7 +904,7 @@ WRITE expected.txt UNTIL EOF 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/schema-html.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/schema-html.metapack 2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/search/%/directory.metapack -2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/search/response/%/schema-html.metapack +2> ( 84%) Producing: explorer/public/self/v1/schemas/api/schemas/search/response/%/schema-html.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/response/%/schema-html.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory.metapack @@ -884,7 +913,7 @@ WRITE expected.txt UNTIL EOF 2> ( 85%) Producing: explorer/public/self/v1/schemas/mcp/error/%/schema-html.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory.metapack 2> ( 85%) Producing: explorer/public/self/v1/schemas/mcp/initialize/request/%/schema-html.metapack -2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/initialize/response/%/schema-html.metapack +2> ( 85%) Producing: explorer/public/self/v1/schemas/mcp/initialize/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/schema-html.metapack @@ -892,7 +921,7 @@ WRITE expected.txt UNTIL EOF 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/request/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/ping/response/%/schema-html.metapack 2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory.metapack -2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack +2> ( 86%) Producing: explorer/public/self/v1/schemas/mcp/prm/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/request/%/schema-html.metapack @@ -901,7 +930,7 @@ WRITE expected.txt UNTIL EOF 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/request/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/read/response/%/schema-html.metapack 2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory.metapack -2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack +2> ( 87%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory.metapack @@ -909,8 +938,8 @@ WRITE expected.txt UNTIL EOF 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/schema-html.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory.metapack 2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/schema-html.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack -2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/schema-html.metapack +2> ( 88%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory.metapack @@ -918,8 +947,8 @@ WRITE expected.txt UNTIL EOF 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/schema-html.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory.metapack 2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack -2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/schema-html.metapack +2> ( 89%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory.metapack @@ -927,32 +956,34 @@ WRITE expected.txt UNTIL EOF 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/schema-html.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory.metapack 2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack -2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/schema-html.metapack +2> ( 90%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/schema-html.metapack 2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/request/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack -2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/response/%/schema-html.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory.metapack +2> ( 91%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response/%/schema-html.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory.metapack 2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/request/%/schema-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack -2> ( 93%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/response/%/schema-html.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory.metapack +2> ( 92%) Producing: explorer/public/self/v1/schemas/api/auth/login/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/list/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependencies/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/dependents/%/directory-html.metapack 2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/evaluate/%/directory-html.metapack -2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack +2> ( 93%) Producing: explorer/public/self/v1/schemas/api/schemas/health/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/locations/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/metadata/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/positions/%/directory-html.metapack @@ -961,7 +992,7 @@ WRITE expected.txt UNTIL EOF 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/stats/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/api/schemas/trace/%/directory-html.metapack 2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/initialize/%/directory-html.metapack -2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack +2> ( 94%) Producing: explorer/public/self/v1/schemas/mcp/notifications/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/ping/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/prm/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/list/%/directory-html.metapack @@ -969,8 +1000,8 @@ WRITE expected.txt UNTIL EOF 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/list/%/directory-html.metapack 2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack -2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/%/directory-html.metapack +2> ( 95%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/%/directory-html.metapack @@ -978,22 +1009,25 @@ WRITE expected.txt UNTIL EOF 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/%/directory-html.metapack 2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/%/directory-html.metapack +2> ( 96%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/list/%/directory-html.metapack -2> ( 97%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/auth/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack 2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/resources/templates/%/directory-html.metapack +2> ( 97%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/call/%/directory-html.metapack -2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/resources/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/tools/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/%/directory.metapack +2> ( 98%) Producing: explorer/public/self/v1/schemas/api/%/directory-html.metapack 2> ( 98%) Producing: explorer/public/self/v1/schemas/mcp/%/directory-html.metapack 2> ( 99%) Producing: explorer/public/self/v1/%/directory.metapack 2> ( 99%) Producing: explorer/public/self/v1/schemas/%/directory-html.metapack @@ -1007,59 +1041,61 @@ WRITE expected.txt UNTIL EOF 2> ( 1%) Combining: explorer/public/self/v1/schemas/api/auth/login/response/%/dependents.metapack 2> ( 3%) Combining: explorer/public/self/v1/schemas/api/error/%/dependents.metapack 2> ( 4%) Combining: explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack -2> ( 6%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack -2> ( 7%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack -2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack -2> ( 11%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack -2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack -2> ( 14%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack -2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack -2> ( 17%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack -2> ( 19%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack -2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack -2> ( 22%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack -2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack -2> ( 25%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack -2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack -2> ( 28%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack -2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack -2> ( 31%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack -2> ( 33%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack -2> ( 34%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack -2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack -2> ( 38%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack -2> ( 39%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack -2> ( 41%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack -2> ( 42%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack -2> ( 44%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack -2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack -2> ( 47%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack -2> ( 49%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack -2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack -2> ( 52%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack -2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack -2> ( 55%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack -2> ( 57%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack -2> ( 58%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack -2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack -2> ( 61%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack -2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack -2> ( 65%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack -2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack -2> ( 68%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack -2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack -2> ( 71%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack +2> ( 6%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +2> ( 7%) Combining: explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +2> ( 9%) Combining: explorer/public/self/v1/schemas/api/schemas/dependencies/response/%/dependents.metapack +2> ( 10%) Combining: explorer/public/self/v1/schemas/api/schemas/dependents/response/%/dependents.metapack +2> ( 12%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/request/%/dependents.metapack +2> ( 13%) Combining: explorer/public/self/v1/schemas/api/schemas/evaluate/response/%/dependents.metapack +2> ( 15%) Combining: explorer/public/self/v1/schemas/api/schemas/health/response/%/dependents.metapack +2> ( 16%) Combining: explorer/public/self/v1/schemas/api/schemas/locations/response/%/dependents.metapack +2> ( 18%) Combining: explorer/public/self/v1/schemas/api/schemas/metadata/response/%/dependents.metapack +2> ( 20%) Combining: explorer/public/self/v1/schemas/api/schemas/output-error/%/dependents.metapack +2> ( 21%) Combining: explorer/public/self/v1/schemas/api/schemas/position/%/dependents.metapack +2> ( 23%) Combining: explorer/public/self/v1/schemas/api/schemas/positions/response/%/dependents.metapack +2> ( 24%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/request/%/dependents.metapack +2> ( 26%) Combining: explorer/public/self/v1/schemas/api/schemas/rdf/response/%/dependents.metapack +2> ( 27%) Combining: explorer/public/self/v1/schemas/api/schemas/search/response/%/dependents.metapack +2> ( 29%) Combining: explorer/public/self/v1/schemas/api/schemas/stats/response/%/dependents.metapack +2> ( 30%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/request/%/dependents.metapack +2> ( 32%) Combining: explorer/public/self/v1/schemas/api/schemas/trace/response/%/dependents.metapack +2> ( 33%) Combining: explorer/public/self/v1/schemas/mcp/error/%/dependents.metapack +2> ( 35%) Combining: explorer/public/self/v1/schemas/mcp/initialize/request/%/dependents.metapack +2> ( 36%) Combining: explorer/public/self/v1/schemas/mcp/initialize/response/%/dependents.metapack +2> ( 38%) Combining: explorer/public/self/v1/schemas/mcp/notifications/cancelled/%/dependents.metapack +2> ( 40%) Combining: explorer/public/self/v1/schemas/mcp/notifications/initialized/%/dependents.metapack +2> ( 41%) Combining: explorer/public/self/v1/schemas/mcp/ping/request/%/dependents.metapack +2> ( 43%) Combining: explorer/public/self/v1/schemas/mcp/ping/response/%/dependents.metapack +2> ( 44%) Combining: explorer/public/self/v1/schemas/mcp/prm/response/%/dependents.metapack +2> ( 46%) Combining: explorer/public/self/v1/schemas/mcp/request/%/dependents.metapack +2> ( 47%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/request/%/dependents.metapack +2> ( 49%) Combining: explorer/public/self/v1/schemas/mcp/resources/list/response/%/dependents.metapack +2> ( 50%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/request/%/dependents.metapack +2> ( 52%) Combining: explorer/public/self/v1/schemas/mcp/resources/read/response/%/dependents.metapack +2> ( 53%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/request/%/dependents.metapack +2> ( 55%) Combining: explorer/public/self/v1/schemas/mcp/resources/templates/list/response/%/dependents.metapack +2> ( 56%) Combining: explorer/public/self/v1/schemas/mcp/response/%/dependents.metapack +2> ( 58%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/request/%/dependents.metapack +2> ( 60%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/evaluate-schema/response/%/dependents.metapack +2> ( 61%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request/%/dependents.metapack +2> ( 63%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response/%/dependents.metapack +2> ( 64%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/request/%/dependents.metapack +2> ( 66%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-dependents/response/%/dependents.metapack +2> ( 67%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/request/%/dependents.metapack +2> ( 69%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-health/response/%/dependents.metapack +2> ( 70%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/request/%/dependents.metapack +2> ( 72%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-locations/response/%/dependents.metapack 2> ( 73%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/request/%/dependents.metapack -2> ( 74%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack +2> ( 75%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-metadata/response/%/dependents.metapack 2> ( 76%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/request/%/dependents.metapack -2> ( 77%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack -2> ( 79%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack -2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack -2> ( 82%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack +2> ( 78%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-positions/response/%/dependents.metapack +2> ( 80%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/request/%/dependents.metapack +2> ( 81%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/get-schema-stats/response/%/dependents.metapack +2> ( 83%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/request/%/dependents.metapack 2> ( 84%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/instance-to-rdf/response/%/dependents.metapack -2> ( 85%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack +2> ( 86%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/request/%/dependents.metapack 2> ( 87%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/list-directory/response/%/dependents.metapack -2> ( 88%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack +2> ( 89%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/request/%/dependents.metapack 2> ( 90%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/response/%/dependents.metapack 2> ( 92%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/request/%/dependents.metapack 2> ( 93%) Combining: explorer/public/self/v1/schemas/mcp/tools/call/search-schemas/response/%/dependents.metapack @@ -1130,6 +1166,28 @@ WRITE expected_manifest.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -1623,6 +1681,33 @@ WRITE expected_manifest.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response @@ -2405,66 +2490,68 @@ WRITE expected.txt UNTIL EOF 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/auth/login/response.json (#2) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/error.json (#3) 2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/list/response.json (#4) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#5) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#6) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#7) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#8) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#9) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#10) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#11) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#12) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#13) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#14) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#15) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#16) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#17) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#18) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#19) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#20) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#21) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#22) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#23) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#24) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#25) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#26) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#27) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#28) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#29) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#30) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#31) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#32) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#33) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#34) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#35) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#36) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#37) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#38) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#39) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#40) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#41) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#42) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#43) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#44) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#45) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#46) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#47) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#48) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#49) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#50) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#51) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#52) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#53) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#54) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#55) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#56) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#57) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#58) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#59) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#60) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#61) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#62) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#63) -2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/request.json (#5) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/playground/schemas/trace/response.json (#6) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependencies/response.json (#7) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/dependents/response.json (#8) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/request.json (#9) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/evaluate/response.json (#10) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/health/response.json (#11) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/locations/response.json (#12) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/metadata/response.json (#13) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/output-error.json (#14) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/position.json (#15) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/positions/response.json (#16) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/request.json (#17) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/rdf/response.json (#18) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/search/response.json (#19) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/stats/response.json (#20) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/request.json (#21) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/api/schemas/trace/response.json (#22) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/error.json (#23) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/request.json (#24) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/initialize/response.json (#25) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/cancelled.json (#26) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/notifications/initialized.json (#27) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/request.json (#28) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/ping/response.json (#29) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/prm/response.json (#30) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/request.json (#31) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/request.json (#32) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/list/response.json (#33) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/request.json (#34) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/read/response.json (#35) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/request.json (#36) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/resources/templates/list/response.json (#37) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/response.json (#38) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/request.json (#39) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/evaluate-schema/response.json (#40) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/request.json (#41) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependencies/response.json (#42) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/request.json (#43) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-dependents/response.json (#44) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/request.json (#45) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-health/response.json (#46) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/request.json (#47) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-locations/response.json (#48) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/request.json (#49) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-metadata/response.json (#50) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/request.json (#51) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-positions/response.json (#52) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/request.json (#53) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/get-schema-stats/response.json (#54) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/request.json (#55) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/instance-to-rdf/response.json (#56) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/request.json (#57) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/list-directory/response.json (#58) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/request.json (#59) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/response.json (#60) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/request.json (#61) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/search-schemas/response.json (#62) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/request.json (#63) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/call/trace-schema-evaluation/response.json (#64) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/request.json (#65) +2> Detecting: [PREFIX]/share/sourcemeta/one/self/v1/schemas/mcp/tools/list/response.json (#66) 2> (100%) Resolving: schemas/test.json 2> ( 5%) Producing: schemas/schemas/test/%/schema.metapack 2> ( 11%) Producing: schemas/schemas/test/%/dependencies.metapack @@ -2557,6 +2644,28 @@ WRITE expected_manifest.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -3063,6 +3172,33 @@ WRITE expected_manifest.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/snapshot-collection-path-dot.clitest b/test/cli/index/common/snapshot-collection-path-dot.clitest index 8fbb7851d..e1a14d1e4 100644 --- a/test/cli/index/common/snapshot-collection-path-dot.clitest +++ b/test/cli/index/common/snapshot-collection-path-dot.clitest @@ -87,6 +87,28 @@ WRITE expected.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -580,6 +602,33 @@ WRITE expected.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/snapshot-collection-path-empty.clitest b/test/cli/index/common/snapshot-collection-path-empty.clitest index d9def9321..4643c8b63 100644 --- a/test/cli/index/common/snapshot-collection-path-empty.clitest +++ b/test/cli/index/common/snapshot-collection-path-empty.clitest @@ -87,6 +87,28 @@ WRITE expected.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -580,6 +602,33 @@ WRITE expected.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/snapshot-collection-path-is-file.clitest b/test/cli/index/common/snapshot-collection-path-is-file.clitest index a7c4a5930..0f9698f7c 100644 --- a/test/cli/index/common/snapshot-collection-path-is-file.clitest +++ b/test/cli/index/common/snapshot-collection-path-is-file.clitest @@ -74,6 +74,23 @@ WRITE expected.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/% ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory.metapack @@ -470,6 +487,33 @@ WRITE expected.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/snapshot-collection-path-skips-config-files.clitest b/test/cli/index/common/snapshot-collection-path-skips-config-files.clitest index 4677b5792..e669e7ed4 100644 --- a/test/cli/index/common/snapshot-collection-path-skips-config-files.clitest +++ b/test/cli/index/common/snapshot-collection-path-skips-config-files.clitest @@ -122,6 +122,28 @@ WRITE expected.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -629,6 +651,33 @@ WRITE expected.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/snapshot-default.clitest b/test/cli/index/common/snapshot-default.clitest index e016521a7..bdcb3aaff 100644 --- a/test/cli/index/common/snapshot-default.clitest +++ b/test/cli/index/common/snapshot-default.clitest @@ -102,6 +102,28 @@ WRITE expected.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -608,6 +630,33 @@ WRITE expected.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/snapshot-empty.clitest b/test/cli/index/common/snapshot-empty.clitest index f2c4725c4..1e372532a 100644 --- a/test/cli/index/common/snapshot-empty.clitest +++ b/test/cli/index/common/snapshot-empty.clitest @@ -77,6 +77,28 @@ WRITE expected.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema-html.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema-html.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory-html.metapack @@ -570,6 +592,33 @@ WRITE expected.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/cli/index/common/snapshot-headless.clitest b/test/cli/index/common/snapshot-headless.clitest index 910694d8f..685fd7249 100644 --- a/test/cli/index/common/snapshot-headless.clitest +++ b/test/cli/index/common/snapshot-headless.clitest @@ -88,6 +88,23 @@ WRITE expected.txt UNTIL EOF ./explorer/public/self/v1/schemas/api/list/response/% ./explorer/public/self/v1/schemas/api/list/response/%/dependents.metapack ./explorer/public/self/v1/schemas/api/list/response/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground +./explorer/public/self/v1/schemas/api/playground/% +./explorer/public/self/v1/schemas/api/playground/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas +./explorer/public/self/v1/schemas/api/playground/schemas/% +./explorer/public/self/v1/schemas/api/playground/schemas/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace +./explorer/public/self/v1/schemas/api/playground/schemas/trace/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/%/directory.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/% +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/dependents.metapack +./explorer/public/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack ./explorer/public/self/v1/schemas/api/schemas ./explorer/public/self/v1/schemas/api/schemas/% ./explorer/public/self/v1/schemas/api/schemas/%/directory.metapack @@ -497,6 +514,33 @@ WRITE expected.txt UNTIL EOF ./schemas/self/v1/schemas/api/list/response/%/positions.metapack ./schemas/self/v1/schemas/api/list/response/%/schema.metapack ./schemas/self/v1/schemas/api/list/response/%/stats.metapack +./schemas/self/v1/schemas/api/playground +./schemas/self/v1/schemas/api/playground/schemas +./schemas/self/v1/schemas/api/playground/schemas/trace +./schemas/self/v1/schemas/api/playground/schemas/trace/request +./schemas/self/v1/schemas/api/playground/schemas/trace/request/% +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/request/%/stats.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response +./schemas/self/v1/schemas/api/playground/schemas/trace/response/% +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-exhaustive.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/blaze-fast.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/bundle.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/dependencies.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/editor.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/health.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/locations.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/positions.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/schema.metapack +./schemas/self/v1/schemas/api/playground/schemas/trace/response/%/stats.metapack ./schemas/self/v1/schemas/api/schemas ./schemas/self/v1/schemas/api/schemas/dependencies ./schemas/self/v1/schemas/api/schemas/dependencies/response diff --git a/test/e2e/empty/hurl/test.all.hurl b/test/e2e/empty/hurl/test.all.hurl index 09fd70032..12b17b00e 100644 --- a/test/e2e/empty/hurl/test.all.hurl +++ b/test/e2e/empty/hurl/test.all.hurl @@ -37,5 +37,5 @@ jsonpath "$.entries[0].type" == "directory" jsonpath "$.entries[0].title" == "Self" jsonpath "$.entries[0].description" == "The schemas that define the current version of this instance" jsonpath "$.entries[0].path" == "/self/" -jsonpath "$.entries[0].health" == 100 -jsonpath "$.entries[0].schemas" == 63 +jsonpath "$.entries[0].health" == 99 +jsonpath "$.entries[0].schemas" == 65 diff --git a/test/e2e/headless/hurl/list.all.hurl b/test/e2e/headless/hurl/list.all.hurl index 89e58b200..1134c9106 100644 --- a/test/e2e/headless/hurl/list.all.hurl +++ b/test/e2e/headless/hurl/list.all.hurl @@ -19,7 +19,7 @@ header "Last-Modified" exists jsonpath "$.path" == "/" jsonpath "$.url" == "{{base}}" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.schemas" == 77 +jsonpath "$.schemas" == 79 jsonpath "$.entries" count >= 2 jsonpath "$.private" == false jsonpath "$.entries[0].name" == "self" @@ -27,8 +27,8 @@ jsonpath "$.entries[0].private" == false jsonpath "$.entries[0].title" == "Self" jsonpath "$.entries[0].description" == "The schemas that define the current version of this instance" jsonpath "$.entries[0].type" == "directory" -jsonpath "$.entries[0].health" == 100 -jsonpath "$.entries[0].schemas" == 63 +jsonpath "$.entries[0].health" == 99 +jsonpath "$.entries[0].schemas" == 65 jsonpath "$.entries[0].path" == "/self/" jsonpath "$.entries[1].name" == "test" jsonpath "$.entries[1].private" == false @@ -157,7 +157,7 @@ header "Last-Modified" exists jsonpath "$.path" == "/" jsonpath "$.url" == "{{base}}" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.schemas" == 77 +jsonpath "$.schemas" == 79 jsonpath "$.entries" count >= 2 jsonpath "$.private" == false jsonpath "$.entries[0].name" == "self" @@ -165,8 +165,8 @@ jsonpath "$.entries[0].private" == false jsonpath "$.entries[0].title" == "Self" jsonpath "$.entries[0].description" == "The schemas that define the current version of this instance" jsonpath "$.entries[0].type" == "directory" -jsonpath "$.entries[0].health" == 100 -jsonpath "$.entries[0].schemas" == 63 +jsonpath "$.entries[0].health" == 99 +jsonpath "$.entries[0].schemas" == 65 jsonpath "$.entries[0].path" == "/self/" jsonpath "$.entries[1].name" == "test" jsonpath "$.entries[1].private" == false diff --git a/test/e2e/headless/hurl/schemas-evaluate.all.hurl b/test/e2e/headless/hurl/schemas-evaluate.all.hurl index 9a15dbd3d..381f7c840 100644 --- a/test/e2e/headless/hurl/schemas-evaluate.all.hurl +++ b/test/e2e/headless/hurl/schemas-evaluate.all.hurl @@ -4,7 +4,7 @@ Cache-Control: no-store Access-Control-Allow-Origin: * Access-Control-Expose-Headers: Link, ETag Access-Control-Allow-Methods: POST, OPTIONS -Access-Control-Allow-Headers: Content-Type +Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Max-Age: 3600 Allow: POST, OPTIONS [Asserts] diff --git a/test/e2e/headless/hurl/schemas-trace.all.hurl b/test/e2e/headless/hurl/schemas-trace.all.hurl index 8e0a00bf6..156e9b535 100644 --- a/test/e2e/headless/hurl/schemas-trace.all.hurl +++ b/test/e2e/headless/hurl/schemas-trace.all.hurl @@ -4,7 +4,7 @@ Cache-Control: no-store Access-Control-Allow-Origin: * Access-Control-Expose-Headers: Link, ETag Access-Control-Allow-Methods: POST, OPTIONS -Access-Control-Allow-Headers: Content-Type +Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Max-Age: 3600 Allow: POST, OPTIONS [Asserts] diff --git a/test/e2e/html/hurl/list.all.hurl b/test/e2e/html/hurl/list.all.hurl index 6bdfecfa6..850b0fd9e 100644 --- a/test/e2e/html/hurl/list.all.hurl +++ b/test/e2e/html/hurl/list.all.hurl @@ -19,7 +19,7 @@ header "Last-Modified" exists jsonpath "$.path" == "/" jsonpath "$.url" == "{{base}}" jsonpath "$.breadcrumb" count == 0 -jsonpath "$.schemas" == 113 +jsonpath "$.schemas" == 115 jsonpath "$.entries" count >= 2 jsonpath "$.private" == false jsonpath "$.entries[0].name" == "self" @@ -27,8 +27,8 @@ jsonpath "$.entries[0].private" == false jsonpath "$.entries[0].title" == "Self" jsonpath "$.entries[0].description" == "The schemas that define the current version of this instance" jsonpath "$.entries[0].type" == "directory" -jsonpath "$.entries[0].health" == 100 -jsonpath "$.entries[0].schemas" == 63 +jsonpath "$.entries[0].health" == 99 +jsonpath "$.entries[0].schemas" == 65 jsonpath "$.entries[0].path" == "/self/" jsonpath "$.entries[1].name" == "test" jsonpath "$.entries[1].private" == false diff --git a/test/e2e/html/hurl/playground-oversized.json b/test/e2e/html/hurl/playground-oversized.json new file mode 100644 index 000000000..6ccac05fc --- /dev/null +++ b/test/e2e/html/hurl/playground-oversized.json @@ -0,0 +1,6 @@ +{ + "instance": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema" + } +} diff --git a/test/e2e/html/hurl/playground-schemas-trace.all.hurl b/test/e2e/html/hurl/playground-schemas-trace.all.hurl new file mode 100644 index 000000000..09316fc65 --- /dev/null +++ b/test/e2e/html/hurl/playground-schemas-trace.all.hurl @@ -0,0 +1,3714 @@ +# A playground schema is one the caller supplies in the request rather than one +# this catalog holds, so a caller can trace against something that was never +# indexed here. What comes back is what tracing a catalog schema gives. +# +# Everything under the playground namespace compiles what a request carries, so +# what it may cost is bounded, and what its references may reach is decided per +# reference against whoever is asking. + +# A schema of the caller's own, against an instance it accepts +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "hello world", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "string" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 2 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "AssertionTypeStrict" +jsonpath "$.steps[0].evaluatePath" == "/type" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 27 +jsonpath "$.steps[0].keywordLocation" == "#/type" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[1].type" == "pass" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 27 +jsonpath "$.steps[1].keywordLocation" == "#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == "The value was expected to be of type string" +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# The same schema against an instance it refuses +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": 42, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "string" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == false +jsonpath "$.steps" count == 2 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "AssertionTypeStrict" +jsonpath "$.steps[0].evaluatePath" == "/type" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 16 +jsonpath "$.steps[0].keywordLocation" == "#/type" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[1].type" == "fail" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 16 +jsonpath "$.steps[1].keywordLocation" == "#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == "The value was expected to be of type string but it was of type integer" +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A schema written against an older dialect, resolved from the built-in +# official schemas rather than from the catalog +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "string" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 2 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "AssertionTypeStrict" +jsonpath "$.steps[0].evaluatePath" == "/type" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 17 +jsonpath "$.steps[0].keywordLocation" == "#/type" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[1].type" == "pass" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 17 +jsonpath "$.steps[1].keywordLocation" == "#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == "The value was expected to be of type string" +jsonpath "$.steps[1].vocabulary" == "http://json-schema.org/draft-07/schema#" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A schema that annotates as well as asserts, so the trace carries the +# annotation alongside the verdict +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "T", + "type": "string" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 3 +jsonpath "$.steps[0].type" == "pass" +jsonpath "$.steps[0].name" == "AnnotationEmit" +jsonpath "$.steps[0].evaluatePath" == "/title" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 17 +jsonpath "$.steps[0].keywordLocation" == "#/title" +jsonpath "$.steps[0].annotation" == "T" +jsonpath "$.steps[0].message" == "The title of the instance was \"T\"" +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 17 +jsonpath "$.steps[1].keywordLocation" == "#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[2].type" == "pass" +jsonpath "$.steps[2].name" == "AssertionTypeStrict" +jsonpath "$.steps[2].evaluatePath" == "/type" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 2 +jsonpath "$.steps[2].instancePositions[3]" == 17 +jsonpath "$.steps[2].keywordLocation" == "#/type" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == "The value was expected to be of type string" +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference resolved within the supplied schema itself, needing no +# catalog lookup at all +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "#/$defs/s", + "$defs": { + "s": { + "type": "string" + } + } + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 4 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 17 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/$ref/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 17 +jsonpath "$.steps[1].keywordLocation" == "#/$defs/s/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[2].type" == "pass" +jsonpath "$.steps[2].name" == "AssertionTypeStrict" +jsonpath "$.steps[2].evaluatePath" == "/$ref/type" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 2 +jsonpath "$.steps[2].instancePositions[3]" == 17 +jsonpath "$.steps[2].keywordLocation" == "#/$defs/s/type" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == "The value was expected to be of type string" +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[3].type" == "pass" +jsonpath "$.steps[3].name" == "ControlJump" +jsonpath "$.steps[3].evaluatePath" == "/$ref" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 2 +jsonpath "$.steps[3].instancePositions[3]" == 17 +jsonpath "$.steps[3].keywordLocation" == "#/$ref" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == "The string value was expected to validate against the referenced schema" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference into the catalog, which decides the verdict +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "hello", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/test/schemas/string" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 4 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 21 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/$ref/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 21 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/test/schemas/string#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[2].type" == "pass" +jsonpath "$.steps[2].name" == "AssertionTypeStrict" +jsonpath "$.steps[2].evaluatePath" == "/$ref/type" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 2 +jsonpath "$.steps[2].instancePositions[3]" == 21 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/test/schemas/string#/type" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == "The value was expected to be of type string" +jsonpath "$.steps[2].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[3].type" == "pass" +jsonpath "$.steps[3].name" == "ControlJump" +jsonpath "$.steps[3].evaluatePath" == "/$ref" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 2 +jsonpath "$.steps[3].instancePositions[3]" == 21 +jsonpath "$.steps[3].keywordLocation" == "#/$ref" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == "The string value was expected to validate against the referenced schema" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# The same reference against an instance it refuses +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": 42, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/test/schemas/string" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == false +jsonpath "$.steps" count == 4 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 16 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/$ref/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 16 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/test/schemas/string#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[2].type" == "fail" +jsonpath "$.steps[2].name" == "AssertionTypeStrict" +jsonpath "$.steps[2].evaluatePath" == "/$ref/type" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 2 +jsonpath "$.steps[2].instancePositions[3]" == 16 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/test/schemas/string#/type" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == "The value was expected to be of type string but it was of type integer" +jsonpath "$.steps[2].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[3].type" == "fail" +jsonpath "$.steps[3].name" == "ControlJump" +jsonpath "$.steps[3].evaluatePath" == "/$ref" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 2 +jsonpath "$.steps[3].instancePositions[3]" == 16 +jsonpath "$.steps[3].keywordLocation" == "#/$ref" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == "The integer value was expected to validate against the referenced schema" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference into the catalog that itself references another catalog +# schema, so resolution follows the chain +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": { + "foo": 1 + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/test/bundling/single" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 8 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 4 +jsonpath "$.steps[0].instancePositions[3]" == 3 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "LogicalWhenType" +jsonpath "$.steps[1].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 4 +jsonpath "$.steps[1].instancePositions[3]" == 3 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/test/bundling/single#/properties" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[2].type" == "push" +jsonpath "$.steps[2].name" == "ControlJump" +jsonpath "$.steps[2].evaluatePath" == "/$ref/properties/foo/$ref" +jsonpath "$.steps[2].instanceLocation" == "/foo" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 3 +jsonpath "$.steps[2].instancePositions[1]" == 5 +jsonpath "$.steps[2].instancePositions[2]" == 3 +jsonpath "$.steps[2].instancePositions[3]" == 12 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/test/bundling/single#/properties/foo/$ref" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == null +jsonpath "$.steps[2].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[3].type" == "push" +jsonpath "$.steps[3].name" == "AssertionType" +jsonpath "$.steps[3].evaluatePath" == "/$ref/properties/foo/$ref/type" +jsonpath "$.steps[3].instanceLocation" == "/foo" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 3 +jsonpath "$.steps[3].instancePositions[1]" == 5 +jsonpath "$.steps[3].instancePositions[2]" == 3 +jsonpath "$.steps[3].instancePositions[3]" == 12 +jsonpath "$.steps[3].keywordLocation" == "{{base}}/test/v2.0/schema#/type" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == null +jsonpath "$.steps[3].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[4].type" == "pass" +jsonpath "$.steps[4].name" == "AssertionType" +jsonpath "$.steps[4].evaluatePath" == "/$ref/properties/foo/$ref/type" +jsonpath "$.steps[4].instanceLocation" == "/foo" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 3 +jsonpath "$.steps[4].instancePositions[1]" == 5 +jsonpath "$.steps[4].instancePositions[2]" == 3 +jsonpath "$.steps[4].instancePositions[3]" == 12 +jsonpath "$.steps[4].keywordLocation" == "{{base}}/test/v2.0/schema#/type" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == "The value was expected to be of type integer" +jsonpath "$.steps[4].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[5].type" == "pass" +jsonpath "$.steps[5].name" == "ControlJump" +jsonpath "$.steps[5].evaluatePath" == "/$ref/properties/foo/$ref" +jsonpath "$.steps[5].instanceLocation" == "/foo" +jsonpath "$.steps[5].instancePositions" count == 4 +jsonpath "$.steps[5].instancePositions[0]" == 3 +jsonpath "$.steps[5].instancePositions[1]" == 5 +jsonpath "$.steps[5].instancePositions[2]" == 3 +jsonpath "$.steps[5].instancePositions[3]" == 12 +jsonpath "$.steps[5].keywordLocation" == "{{base}}/test/bundling/single#/properties/foo/$ref" +jsonpath "$.steps[5].annotation" == null +jsonpath "$.steps[5].message" == "The integer value was expected to validate against the referenced schema" +jsonpath "$.steps[5].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[6].type" == "pass" +jsonpath "$.steps[6].name" == "LogicalWhenType" +jsonpath "$.steps[6].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[6].instanceLocation" == "" +jsonpath "$.steps[6].instancePositions" count == 4 +jsonpath "$.steps[6].instancePositions[0]" == 2 +jsonpath "$.steps[6].instancePositions[1]" == 3 +jsonpath "$.steps[6].instancePositions[2]" == 4 +jsonpath "$.steps[6].instancePositions[3]" == 3 +jsonpath "$.steps[6].keywordLocation" == "{{base}}/test/bundling/single#/properties" +jsonpath "$.steps[6].annotation" == null +jsonpath "$.steps[6].message" == "The object value was expected to validate against the single defined property subschema" +jsonpath "$.steps[6].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[7].type" == "pass" +jsonpath "$.steps[7].name" == "ControlJump" +jsonpath "$.steps[7].evaluatePath" == "/$ref" +jsonpath "$.steps[7].instanceLocation" == "" +jsonpath "$.steps[7].instancePositions" count == 4 +jsonpath "$.steps[7].instancePositions[0]" == 2 +jsonpath "$.steps[7].instancePositions[1]" == 3 +jsonpath "$.steps[7].instancePositions[2]" == 4 +jsonpath "$.steps[7].instancePositions[3]" == 3 +jsonpath "$.steps[7].keywordLocation" == "#/$ref" +jsonpath "$.steps[7].annotation" == null +jsonpath "$.steps[7].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[7].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference into the catalog that points at a subschema rather than a +# whole schema +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/test/bundling/single#/properties/foo" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == false +jsonpath "$.steps" count == 6 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 17 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "ControlJump" +jsonpath "$.steps[1].evaluatePath" == "/$ref/$ref" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 17 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/test/bundling/single#/properties/foo/$ref" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[2].type" == "push" +jsonpath "$.steps[2].name" == "AssertionType" +jsonpath "$.steps[2].evaluatePath" == "/$ref/$ref/type" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 2 +jsonpath "$.steps[2].instancePositions[3]" == 17 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/test/v2.0/schema#/type" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == null +jsonpath "$.steps[2].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[3].type" == "fail" +jsonpath "$.steps[3].name" == "AssertionType" +jsonpath "$.steps[3].evaluatePath" == "/$ref/$ref/type" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 2 +jsonpath "$.steps[3].instancePositions[3]" == 17 +jsonpath "$.steps[3].keywordLocation" == "{{base}}/test/v2.0/schema#/type" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == "The value was expected to be of type integer but it was of type string" +jsonpath "$.steps[3].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[4].type" == "fail" +jsonpath "$.steps[4].name" == "ControlJump" +jsonpath "$.steps[4].evaluatePath" == "/$ref/$ref" +jsonpath "$.steps[4].instanceLocation" == "" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 2 +jsonpath "$.steps[4].instancePositions[1]" == 3 +jsonpath "$.steps[4].instancePositions[2]" == 2 +jsonpath "$.steps[4].instancePositions[3]" == 17 +jsonpath "$.steps[4].keywordLocation" == "{{base}}/test/bundling/single#/properties/foo/$ref" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == "The string value was expected to validate against the referenced schema" +jsonpath "$.steps[4].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[5].type" == "fail" +jsonpath "$.steps[5].name" == "ControlJump" +jsonpath "$.steps[5].evaluatePath" == "/$ref" +jsonpath "$.steps[5].instanceLocation" == "" +jsonpath "$.steps[5].instancePositions" count == 4 +jsonpath "$.steps[5].instancePositions[0]" == 2 +jsonpath "$.steps[5].instancePositions[1]" == 3 +jsonpath "$.steps[5].instancePositions[2]" == 2 +jsonpath "$.steps[5].instancePositions[3]" == 17 +jsonpath "$.steps[5].keywordLocation" == "#/$ref" +jsonpath "$.steps[5].annotation" == null +jsonpath "$.steps[5].message" == "The string value was expected to validate against the referenced schema" +jsonpath "$.steps[5].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference to one of this instance's own schemas, which are catalog +# content like any other +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": { + "valid": true, + "steps": [] + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/self/v1/schemas/api/schemas/trace/response" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 19 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 5 +jsonpath "$.steps[0].instancePositions[3]" == 3 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "pass" +jsonpath "$.steps[1].name" == "AnnotationEmit" +jsonpath "$.steps[1].evaluatePath" == "/$ref/description" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 5 +jsonpath "$.steps[1].instancePositions[3]" == 3 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/description" +jsonpath "$.steps[1].annotation" == "The response format for the schema trace API endpoint" +jsonpath "$.steps[1].message" == "The description of the instance was \"The response format for the schema trace API endpoint\"" +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[2].type" == "pass" +jsonpath "$.steps[2].name" == "AnnotationEmit" +jsonpath "$.steps[2].evaluatePath" == "/$ref/examples" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 5 +jsonpath "$.steps[2].instancePositions[3]" == 3 +jsonpath "$.steps[2].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/examples" +jsonpath "$.steps[2].annotation" count == 1 +jsonpath "$.steps[2].annotation[0].valid" == true +jsonpath "$.steps[2].annotation[0].steps" count == 0 +jsonpath "$.steps[2].message" == "Examples of the instance were and {\"valid\":true,\"steps\":[]}" +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[3].type" == "push" +jsonpath "$.steps[3].name" == "AssertionDefinesExactly" +jsonpath "$.steps[3].evaluatePath" == "/$ref/required" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 5 +jsonpath "$.steps[3].instancePositions[3]" == 3 +jsonpath "$.steps[3].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/required" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == null +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[4].type" == "pass" +jsonpath "$.steps[4].name" == "AssertionDefinesExactly" +jsonpath "$.steps[4].evaluatePath" == "/$ref/required" +jsonpath "$.steps[4].instanceLocation" == "" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 2 +jsonpath "$.steps[4].instancePositions[1]" == 3 +jsonpath "$.steps[4].instancePositions[2]" == 5 +jsonpath "$.steps[4].instancePositions[3]" == 3 +jsonpath "$.steps[4].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/required" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == "The object value was expected to only define properties \"steps\", and \"valid\"" +jsonpath "$.steps[4].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[5].type" == "pass" +jsonpath "$.steps[5].name" == "AnnotationEmit" +jsonpath "$.steps[5].evaluatePath" == "/$ref/title" +jsonpath "$.steps[5].instanceLocation" == "" +jsonpath "$.steps[5].instancePositions" count == 4 +jsonpath "$.steps[5].instancePositions[0]" == 2 +jsonpath "$.steps[5].instancePositions[1]" == 3 +jsonpath "$.steps[5].instancePositions[2]" == 5 +jsonpath "$.steps[5].instancePositions[3]" == 3 +jsonpath "$.steps[5].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/title" +jsonpath "$.steps[5].annotation" == "Sourcemeta One Schema Trace API Response" +jsonpath "$.steps[5].message" == "The title of the instance was \"Sourcemeta One Schema Trace API Response\"" +jsonpath "$.steps[5].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[6].type" == "push" +jsonpath "$.steps[6].name" == "LogicalWhenType" +jsonpath "$.steps[6].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[6].instanceLocation" == "" +jsonpath "$.steps[6].instancePositions" count == 4 +jsonpath "$.steps[6].instancePositions[0]" == 2 +jsonpath "$.steps[6].instancePositions[1]" == 3 +jsonpath "$.steps[6].instancePositions[2]" == 5 +jsonpath "$.steps[6].instancePositions[3]" == 3 +jsonpath "$.steps[6].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/properties" +jsonpath "$.steps[6].annotation" == null +jsonpath "$.steps[6].message" == null +jsonpath "$.steps[6].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[7].type" == "push" +jsonpath "$.steps[7].name" == "AssertionTypeStrict" +jsonpath "$.steps[7].evaluatePath" == "/$ref/properties/valid/type" +jsonpath "$.steps[7].instanceLocation" == "/valid" +jsonpath "$.steps[7].instancePositions" count == 4 +jsonpath "$.steps[7].instancePositions[0]" == 3 +jsonpath "$.steps[7].instancePositions[1]" == 5 +jsonpath "$.steps[7].instancePositions[2]" == 3 +jsonpath "$.steps[7].instancePositions[3]" == 17 +jsonpath "$.steps[7].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/properties/valid/type" +jsonpath "$.steps[7].annotation" == null +jsonpath "$.steps[7].message" == null +jsonpath "$.steps[7].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[8].type" == "pass" +jsonpath "$.steps[8].name" == "AssertionTypeStrict" +jsonpath "$.steps[8].evaluatePath" == "/$ref/properties/valid/type" +jsonpath "$.steps[8].instanceLocation" == "/valid" +jsonpath "$.steps[8].instancePositions" count == 4 +jsonpath "$.steps[8].instancePositions[0]" == 3 +jsonpath "$.steps[8].instancePositions[1]" == 5 +jsonpath "$.steps[8].instancePositions[2]" == 3 +jsonpath "$.steps[8].instancePositions[3]" == 17 +jsonpath "$.steps[8].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/properties/valid/type" +jsonpath "$.steps[8].annotation" == null +jsonpath "$.steps[8].message" == "The value was expected to be of type boolean" +jsonpath "$.steps[8].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[9].type" == "pass" +jsonpath "$.steps[9].name" == "AnnotationEmitWrapped" +jsonpath "$.steps[9].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[9].instanceLocation" == "" +jsonpath "$.steps[9].instancePositions" count == 4 +jsonpath "$.steps[9].instancePositions[0]" == 2 +jsonpath "$.steps[9].instancePositions[1]" == 3 +jsonpath "$.steps[9].instancePositions[2]" == 5 +jsonpath "$.steps[9].instancePositions[3]" == 3 +jsonpath "$.steps[9].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/properties" +jsonpath "$.steps[9].annotation" == "valid" +jsonpath "$.steps[9].message" == "The object property \"valid\" successfully validated against its property subschema" +jsonpath "$.steps[9].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[10].type" == "push" +jsonpath "$.steps[10].name" == "AssertionTypeStrict" +jsonpath "$.steps[10].evaluatePath" == "/$ref/properties/steps/type" +jsonpath "$.steps[10].instanceLocation" == "/steps" +jsonpath "$.steps[10].instancePositions" count == 4 +jsonpath "$.steps[10].instancePositions[0]" == 4 +jsonpath "$.steps[10].instancePositions[1]" == 5 +jsonpath "$.steps[10].instancePositions[2]" == 4 +jsonpath "$.steps[10].instancePositions[3]" == 15 +jsonpath "$.steps[10].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/properties/steps/type" +jsonpath "$.steps[10].annotation" == null +jsonpath "$.steps[10].message" == null +jsonpath "$.steps[10].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[11].type" == "pass" +jsonpath "$.steps[11].name" == "AssertionTypeStrict" +jsonpath "$.steps[11].evaluatePath" == "/$ref/properties/steps/type" +jsonpath "$.steps[11].instanceLocation" == "/steps" +jsonpath "$.steps[11].instancePositions" count == 4 +jsonpath "$.steps[11].instancePositions[0]" == 4 +jsonpath "$.steps[11].instancePositions[1]" == 5 +jsonpath "$.steps[11].instancePositions[2]" == 4 +jsonpath "$.steps[11].instancePositions[3]" == 15 +jsonpath "$.steps[11].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/properties/steps/type" +jsonpath "$.steps[11].annotation" == null +jsonpath "$.steps[11].message" == "The value was expected to be of type array" +jsonpath "$.steps[11].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[12].type" == "pass" +jsonpath "$.steps[12].name" == "AnnotationEmitWrapped" +jsonpath "$.steps[12].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[12].instanceLocation" == "" +jsonpath "$.steps[12].instancePositions" count == 4 +jsonpath "$.steps[12].instancePositions[0]" == 2 +jsonpath "$.steps[12].instancePositions[1]" == 3 +jsonpath "$.steps[12].instancePositions[2]" == 5 +jsonpath "$.steps[12].instancePositions[3]" == 3 +jsonpath "$.steps[12].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/properties" +jsonpath "$.steps[12].annotation" == "steps" +jsonpath "$.steps[12].message" == "The object property \"steps\" successfully validated against its property subschema" +jsonpath "$.steps[12].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[13].type" == "pass" +jsonpath "$.steps[13].name" == "LogicalWhenType" +jsonpath "$.steps[13].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[13].instanceLocation" == "" +jsonpath "$.steps[13].instancePositions" count == 4 +jsonpath "$.steps[13].instancePositions[0]" == 2 +jsonpath "$.steps[13].instancePositions[1]" == 3 +jsonpath "$.steps[13].instancePositions[2]" == 5 +jsonpath "$.steps[13].instancePositions[3]" == 3 +jsonpath "$.steps[13].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/properties" +jsonpath "$.steps[13].annotation" == null +jsonpath "$.steps[13].message" == "The object value was expected to validate against the defined properties subschemas" +jsonpath "$.steps[13].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[14].type" == "push" +jsonpath "$.steps[14].name" == "LoopPropertiesExcept" +jsonpath "$.steps[14].evaluatePath" == "/$ref/additionalProperties" +jsonpath "$.steps[14].instanceLocation" == "" +jsonpath "$.steps[14].instancePositions" count == 4 +jsonpath "$.steps[14].instancePositions[0]" == 2 +jsonpath "$.steps[14].instancePositions[1]" == 3 +jsonpath "$.steps[14].instancePositions[2]" == 5 +jsonpath "$.steps[14].instancePositions[3]" == 3 +jsonpath "$.steps[14].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/additionalProperties" +jsonpath "$.steps[14].annotation" == null +jsonpath "$.steps[14].message" == null +jsonpath "$.steps[14].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[15].type" == "pass" +jsonpath "$.steps[15].name" == "LoopPropertiesExcept" +jsonpath "$.steps[15].evaluatePath" == "/$ref/additionalProperties" +jsonpath "$.steps[15].instanceLocation" == "" +jsonpath "$.steps[15].instancePositions" count == 4 +jsonpath "$.steps[15].instancePositions[0]" == 2 +jsonpath "$.steps[15].instancePositions[1]" == 3 +jsonpath "$.steps[15].instancePositions[2]" == 5 +jsonpath "$.steps[15].instancePositions[3]" == 3 +jsonpath "$.steps[15].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/additionalProperties" +jsonpath "$.steps[15].annotation" == null +jsonpath "$.steps[15].message" == "The object value was not expected to define additional properties" +jsonpath "$.steps[15].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[16].type" == "push" +jsonpath "$.steps[16].name" == "AssertionTypeStrict" +jsonpath "$.steps[16].evaluatePath" == "/$ref/type" +jsonpath "$.steps[16].instanceLocation" == "" +jsonpath "$.steps[16].instancePositions" count == 4 +jsonpath "$.steps[16].instancePositions[0]" == 2 +jsonpath "$.steps[16].instancePositions[1]" == 3 +jsonpath "$.steps[16].instancePositions[2]" == 5 +jsonpath "$.steps[16].instancePositions[3]" == 3 +jsonpath "$.steps[16].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/type" +jsonpath "$.steps[16].annotation" == null +jsonpath "$.steps[16].message" == null +jsonpath "$.steps[16].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[17].type" == "pass" +jsonpath "$.steps[17].name" == "AssertionTypeStrict" +jsonpath "$.steps[17].evaluatePath" == "/$ref/type" +jsonpath "$.steps[17].instanceLocation" == "" +jsonpath "$.steps[17].instancePositions" count == 4 +jsonpath "$.steps[17].instancePositions[0]" == 2 +jsonpath "$.steps[17].instancePositions[1]" == 3 +jsonpath "$.steps[17].instancePositions[2]" == 5 +jsonpath "$.steps[17].instancePositions[3]" == 3 +jsonpath "$.steps[17].keywordLocation" == "{{base}}/self/v1/schemas/api/schemas/trace/response#/type" +jsonpath "$.steps[17].annotation" == null +jsonpath "$.steps[17].message" == "The value was expected to be of type object" +jsonpath "$.steps[17].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[18].type" == "pass" +jsonpath "$.steps[18].name" == "ControlJump" +jsonpath "$.steps[18].evaluatePath" == "/$ref" +jsonpath "$.steps[18].instanceLocation" == "" +jsonpath "$.steps[18].instancePositions" count == 4 +jsonpath "$.steps[18].instancePositions[0]" == 2 +jsonpath "$.steps[18].instancePositions[1]" == 3 +jsonpath "$.steps[18].instancePositions[2]" == 5 +jsonpath "$.steps[18].instancePositions[3]" == 3 +jsonpath "$.steps[18].keywordLocation" == "#/$ref" +jsonpath "$.steps[18].annotation" == null +jsonpath "$.steps[18].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[18].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# An official metaschema resolves without being in this catalog, which is +# what lets a caller name a dialect at all +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": { + "type": "string" + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "https://json-schema.org/draft/2020-12/schema" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 67 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "ControlJump" +jsonpath "$.steps[0].evaluatePath" == "/$ref" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 4 +jsonpath "$.steps[0].instancePositions[3]" == 3 +jsonpath "$.steps[0].keywordLocation" == "#/$ref" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "LogicalAnd" +jsonpath "$.steps[1].evaluatePath" == "/$ref/allOf" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 4 +jsonpath "$.steps[1].instancePositions[3]" == 3 +jsonpath "$.steps[1].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[2].type" == "push" +jsonpath "$.steps[2].name" == "ControlJump" +jsonpath "$.steps[2].evaluatePath" == "/$ref/allOf/0/$ref" +jsonpath "$.steps[2].instanceLocation" == "" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 2 +jsonpath "$.steps[2].instancePositions[1]" == 3 +jsonpath "$.steps[2].instancePositions[2]" == 4 +jsonpath "$.steps[2].instancePositions[3]" == 3 +jsonpath "$.steps[2].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/0/$ref" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == null +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[3].type" == "pass" +jsonpath "$.steps[3].name" == "AnnotationEmit" +jsonpath "$.steps[3].evaluatePath" == "/$ref/allOf/0/$ref/title" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 4 +jsonpath "$.steps[3].instancePositions[3]" == 3 +jsonpath "$.steps[3].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/core#/title" +jsonpath "$.steps[3].annotation" == "Core vocabulary meta-schema" +jsonpath "$.steps[3].message" == "The title of the instance was \"Core vocabulary meta-schema\"" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[4].type" == "push" +jsonpath "$.steps[4].name" == "LoopPropertiesMatch" +jsonpath "$.steps[4].evaluatePath" == "/$ref/allOf/0/$ref/properties" +jsonpath "$.steps[4].instanceLocation" == "" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 2 +jsonpath "$.steps[4].instancePositions[1]" == 3 +jsonpath "$.steps[4].instancePositions[2]" == 4 +jsonpath "$.steps[4].instancePositions[3]" == 3 +jsonpath "$.steps[4].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/core#/properties" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == null +jsonpath "$.steps[4].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[5].type" == "pass" +jsonpath "$.steps[5].name" == "LoopPropertiesMatch" +jsonpath "$.steps[5].evaluatePath" == "/$ref/allOf/0/$ref/properties" +jsonpath "$.steps[5].instanceLocation" == "" +jsonpath "$.steps[5].instancePositions" count == 4 +jsonpath "$.steps[5].instancePositions[0]" == 2 +jsonpath "$.steps[5].instancePositions[1]" == 3 +jsonpath "$.steps[5].instancePositions[2]" == 4 +jsonpath "$.steps[5].instancePositions[3]" == 3 +jsonpath "$.steps[5].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/core#/properties" +jsonpath "$.steps[5].annotation" == null +jsonpath "$.steps[5].message" == "The object value was expected to validate against the 9 defined properties subschemas" +jsonpath "$.steps[5].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[6].type" == "push" +jsonpath "$.steps[6].name" == "AssertionTypeAny" +jsonpath "$.steps[6].evaluatePath" == "/$ref/allOf/0/$ref/type" +jsonpath "$.steps[6].instanceLocation" == "" +jsonpath "$.steps[6].instancePositions" count == 4 +jsonpath "$.steps[6].instancePositions[0]" == 2 +jsonpath "$.steps[6].instancePositions[1]" == 3 +jsonpath "$.steps[6].instancePositions[2]" == 4 +jsonpath "$.steps[6].instancePositions[3]" == 3 +jsonpath "$.steps[6].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/core#/type" +jsonpath "$.steps[6].annotation" == null +jsonpath "$.steps[6].message" == null +jsonpath "$.steps[6].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[7].type" == "pass" +jsonpath "$.steps[7].name" == "AssertionTypeAny" +jsonpath "$.steps[7].evaluatePath" == "/$ref/allOf/0/$ref/type" +jsonpath "$.steps[7].instanceLocation" == "" +jsonpath "$.steps[7].instancePositions" count == 4 +jsonpath "$.steps[7].instancePositions[0]" == 2 +jsonpath "$.steps[7].instancePositions[1]" == 3 +jsonpath "$.steps[7].instancePositions[2]" == 4 +jsonpath "$.steps[7].instancePositions[3]" == 3 +jsonpath "$.steps[7].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/core#/type" +jsonpath "$.steps[7].annotation" == null +jsonpath "$.steps[7].message" == "The value was expected to be of type boolean, or object and it was of type object" +jsonpath "$.steps[7].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[8].type" == "pass" +jsonpath "$.steps[8].name" == "ControlJump" +jsonpath "$.steps[8].evaluatePath" == "/$ref/allOf/0/$ref" +jsonpath "$.steps[8].instanceLocation" == "" +jsonpath "$.steps[8].instancePositions" count == 4 +jsonpath "$.steps[8].instancePositions[0]" == 2 +jsonpath "$.steps[8].instancePositions[1]" == 3 +jsonpath "$.steps[8].instancePositions[2]" == 4 +jsonpath "$.steps[8].instancePositions[3]" == 3 +jsonpath "$.steps[8].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/0/$ref" +jsonpath "$.steps[8].annotation" == null +jsonpath "$.steps[8].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[8].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[9].type" == "push" +jsonpath "$.steps[9].name" == "ControlJump" +jsonpath "$.steps[9].evaluatePath" == "/$ref/allOf/1/$ref" +jsonpath "$.steps[9].instanceLocation" == "" +jsonpath "$.steps[9].instancePositions" count == 4 +jsonpath "$.steps[9].instancePositions[0]" == 2 +jsonpath "$.steps[9].instancePositions[1]" == 3 +jsonpath "$.steps[9].instancePositions[2]" == 4 +jsonpath "$.steps[9].instancePositions[3]" == 3 +jsonpath "$.steps[9].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/1/$ref" +jsonpath "$.steps[9].annotation" == null +jsonpath "$.steps[9].message" == null +jsonpath "$.steps[9].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[10].type" == "pass" +jsonpath "$.steps[10].name" == "AnnotationEmit" +jsonpath "$.steps[10].evaluatePath" == "/$ref/allOf/1/$ref/title" +jsonpath "$.steps[10].instanceLocation" == "" +jsonpath "$.steps[10].instancePositions" count == 4 +jsonpath "$.steps[10].instancePositions[0]" == 2 +jsonpath "$.steps[10].instancePositions[1]" == 3 +jsonpath "$.steps[10].instancePositions[2]" == 4 +jsonpath "$.steps[10].instancePositions[3]" == 3 +jsonpath "$.steps[10].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/applicator#/title" +jsonpath "$.steps[10].annotation" == "Applicator vocabulary meta-schema" +jsonpath "$.steps[10].message" == "The title of the instance was \"Applicator vocabulary meta-schema\"" +jsonpath "$.steps[10].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[11].type" == "push" +jsonpath "$.steps[11].name" == "LoopPropertiesMatch" +jsonpath "$.steps[11].evaluatePath" == "/$ref/allOf/1/$ref/properties" +jsonpath "$.steps[11].instanceLocation" == "" +jsonpath "$.steps[11].instancePositions" count == 4 +jsonpath "$.steps[11].instancePositions[0]" == 2 +jsonpath "$.steps[11].instancePositions[1]" == 3 +jsonpath "$.steps[11].instancePositions[2]" == 4 +jsonpath "$.steps[11].instancePositions[3]" == 3 +jsonpath "$.steps[11].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/applicator#/properties" +jsonpath "$.steps[11].annotation" == null +jsonpath "$.steps[11].message" == null +jsonpath "$.steps[11].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[12].type" == "pass" +jsonpath "$.steps[12].name" == "LoopPropertiesMatch" +jsonpath "$.steps[12].evaluatePath" == "/$ref/allOf/1/$ref/properties" +jsonpath "$.steps[12].instanceLocation" == "" +jsonpath "$.steps[12].instancePositions" count == 4 +jsonpath "$.steps[12].instancePositions[0]" == 2 +jsonpath "$.steps[12].instancePositions[1]" == 3 +jsonpath "$.steps[12].instancePositions[2]" == 4 +jsonpath "$.steps[12].instancePositions[3]" == 3 +jsonpath "$.steps[12].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/applicator#/properties" +jsonpath "$.steps[12].annotation" == null +jsonpath "$.steps[12].message" == "The object value was expected to validate against the 15 defined properties subschemas" +jsonpath "$.steps[12].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[13].type" == "push" +jsonpath "$.steps[13].name" == "AssertionTypeAny" +jsonpath "$.steps[13].evaluatePath" == "/$ref/allOf/1/$ref/type" +jsonpath "$.steps[13].instanceLocation" == "" +jsonpath "$.steps[13].instancePositions" count == 4 +jsonpath "$.steps[13].instancePositions[0]" == 2 +jsonpath "$.steps[13].instancePositions[1]" == 3 +jsonpath "$.steps[13].instancePositions[2]" == 4 +jsonpath "$.steps[13].instancePositions[3]" == 3 +jsonpath "$.steps[13].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/applicator#/type" +jsonpath "$.steps[13].annotation" == null +jsonpath "$.steps[13].message" == null +jsonpath "$.steps[13].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[14].type" == "pass" +jsonpath "$.steps[14].name" == "AssertionTypeAny" +jsonpath "$.steps[14].evaluatePath" == "/$ref/allOf/1/$ref/type" +jsonpath "$.steps[14].instanceLocation" == "" +jsonpath "$.steps[14].instancePositions" count == 4 +jsonpath "$.steps[14].instancePositions[0]" == 2 +jsonpath "$.steps[14].instancePositions[1]" == 3 +jsonpath "$.steps[14].instancePositions[2]" == 4 +jsonpath "$.steps[14].instancePositions[3]" == 3 +jsonpath "$.steps[14].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/applicator#/type" +jsonpath "$.steps[14].annotation" == null +jsonpath "$.steps[14].message" == "The value was expected to be of type boolean, or object and it was of type object" +jsonpath "$.steps[14].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[15].type" == "pass" +jsonpath "$.steps[15].name" == "ControlJump" +jsonpath "$.steps[15].evaluatePath" == "/$ref/allOf/1/$ref" +jsonpath "$.steps[15].instanceLocation" == "" +jsonpath "$.steps[15].instancePositions" count == 4 +jsonpath "$.steps[15].instancePositions[0]" == 2 +jsonpath "$.steps[15].instancePositions[1]" == 3 +jsonpath "$.steps[15].instancePositions[2]" == 4 +jsonpath "$.steps[15].instancePositions[3]" == 3 +jsonpath "$.steps[15].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/1/$ref" +jsonpath "$.steps[15].annotation" == null +jsonpath "$.steps[15].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[15].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[16].type" == "push" +jsonpath "$.steps[16].name" == "ControlJump" +jsonpath "$.steps[16].evaluatePath" == "/$ref/allOf/2/$ref" +jsonpath "$.steps[16].instanceLocation" == "" +jsonpath "$.steps[16].instancePositions" count == 4 +jsonpath "$.steps[16].instancePositions[0]" == 2 +jsonpath "$.steps[16].instancePositions[1]" == 3 +jsonpath "$.steps[16].instancePositions[2]" == 4 +jsonpath "$.steps[16].instancePositions[3]" == 3 +jsonpath "$.steps[16].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/2/$ref" +jsonpath "$.steps[16].annotation" == null +jsonpath "$.steps[16].message" == null +jsonpath "$.steps[16].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[17].type" == "pass" +jsonpath "$.steps[17].name" == "AnnotationEmit" +jsonpath "$.steps[17].evaluatePath" == "/$ref/allOf/2/$ref/title" +jsonpath "$.steps[17].instanceLocation" == "" +jsonpath "$.steps[17].instancePositions" count == 4 +jsonpath "$.steps[17].instancePositions[0]" == 2 +jsonpath "$.steps[17].instancePositions[1]" == 3 +jsonpath "$.steps[17].instancePositions[2]" == 4 +jsonpath "$.steps[17].instancePositions[3]" == 3 +jsonpath "$.steps[17].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/unevaluated#/title" +jsonpath "$.steps[17].annotation" == "Unevaluated applicator vocabulary meta-schema" +jsonpath "$.steps[17].message" == "The title of the instance was \"Unevaluated applicator vocabulary meta-schema\"" +jsonpath "$.steps[17].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[18].type" == "push" +jsonpath "$.steps[18].name" == "LogicalWhenType" +jsonpath "$.steps[18].evaluatePath" == "/$ref/allOf/2/$ref/properties" +jsonpath "$.steps[18].instanceLocation" == "" +jsonpath "$.steps[18].instancePositions" count == 4 +jsonpath "$.steps[18].instancePositions[0]" == 2 +jsonpath "$.steps[18].instancePositions[1]" == 3 +jsonpath "$.steps[18].instancePositions[2]" == 4 +jsonpath "$.steps[18].instancePositions[3]" == 3 +jsonpath "$.steps[18].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/unevaluated#/properties" +jsonpath "$.steps[18].annotation" == null +jsonpath "$.steps[18].message" == null +jsonpath "$.steps[18].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[19].type" == "pass" +jsonpath "$.steps[19].name" == "LogicalWhenType" +jsonpath "$.steps[19].evaluatePath" == "/$ref/allOf/2/$ref/properties" +jsonpath "$.steps[19].instanceLocation" == "" +jsonpath "$.steps[19].instancePositions" count == 4 +jsonpath "$.steps[19].instancePositions[0]" == 2 +jsonpath "$.steps[19].instancePositions[1]" == 3 +jsonpath "$.steps[19].instancePositions[2]" == 4 +jsonpath "$.steps[19].instancePositions[3]" == 3 +jsonpath "$.steps[19].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/unevaluated#/properties" +jsonpath "$.steps[19].annotation" == null +jsonpath "$.steps[19].message" == "The object value was expected to validate against the defined properties subschemas" +jsonpath "$.steps[19].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[20].type" == "push" +jsonpath "$.steps[20].name" == "AssertionTypeAny" +jsonpath "$.steps[20].evaluatePath" == "/$ref/allOf/2/$ref/type" +jsonpath "$.steps[20].instanceLocation" == "" +jsonpath "$.steps[20].instancePositions" count == 4 +jsonpath "$.steps[20].instancePositions[0]" == 2 +jsonpath "$.steps[20].instancePositions[1]" == 3 +jsonpath "$.steps[20].instancePositions[2]" == 4 +jsonpath "$.steps[20].instancePositions[3]" == 3 +jsonpath "$.steps[20].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/unevaluated#/type" +jsonpath "$.steps[20].annotation" == null +jsonpath "$.steps[20].message" == null +jsonpath "$.steps[20].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[21].type" == "pass" +jsonpath "$.steps[21].name" == "AssertionTypeAny" +jsonpath "$.steps[21].evaluatePath" == "/$ref/allOf/2/$ref/type" +jsonpath "$.steps[21].instanceLocation" == "" +jsonpath "$.steps[21].instancePositions" count == 4 +jsonpath "$.steps[21].instancePositions[0]" == 2 +jsonpath "$.steps[21].instancePositions[1]" == 3 +jsonpath "$.steps[21].instancePositions[2]" == 4 +jsonpath "$.steps[21].instancePositions[3]" == 3 +jsonpath "$.steps[21].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/unevaluated#/type" +jsonpath "$.steps[21].annotation" == null +jsonpath "$.steps[21].message" == "The value was expected to be of type boolean, or object and it was of type object" +jsonpath "$.steps[21].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[22].type" == "pass" +jsonpath "$.steps[22].name" == "ControlJump" +jsonpath "$.steps[22].evaluatePath" == "/$ref/allOf/2/$ref" +jsonpath "$.steps[22].instanceLocation" == "" +jsonpath "$.steps[22].instancePositions" count == 4 +jsonpath "$.steps[22].instancePositions[0]" == 2 +jsonpath "$.steps[22].instancePositions[1]" == 3 +jsonpath "$.steps[22].instancePositions[2]" == 4 +jsonpath "$.steps[22].instancePositions[3]" == 3 +jsonpath "$.steps[22].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/2/$ref" +jsonpath "$.steps[22].annotation" == null +jsonpath "$.steps[22].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[22].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[23].type" == "push" +jsonpath "$.steps[23].name" == "ControlJump" +jsonpath "$.steps[23].evaluatePath" == "/$ref/allOf/3/$ref" +jsonpath "$.steps[23].instanceLocation" == "" +jsonpath "$.steps[23].instancePositions" count == 4 +jsonpath "$.steps[23].instancePositions[0]" == 2 +jsonpath "$.steps[23].instancePositions[1]" == 3 +jsonpath "$.steps[23].instancePositions[2]" == 4 +jsonpath "$.steps[23].instancePositions[3]" == 3 +jsonpath "$.steps[23].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/3/$ref" +jsonpath "$.steps[23].annotation" == null +jsonpath "$.steps[23].message" == null +jsonpath "$.steps[23].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[24].type" == "pass" +jsonpath "$.steps[24].name" == "AnnotationEmit" +jsonpath "$.steps[24].evaluatePath" == "/$ref/allOf/3/$ref/title" +jsonpath "$.steps[24].instanceLocation" == "" +jsonpath "$.steps[24].instancePositions" count == 4 +jsonpath "$.steps[24].instancePositions[0]" == 2 +jsonpath "$.steps[24].instancePositions[1]" == 3 +jsonpath "$.steps[24].instancePositions[2]" == 4 +jsonpath "$.steps[24].instancePositions[3]" == 3 +jsonpath "$.steps[24].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/title" +jsonpath "$.steps[24].annotation" == "Validation vocabulary meta-schema" +jsonpath "$.steps[24].message" == "The title of the instance was \"Validation vocabulary meta-schema\"" +jsonpath "$.steps[24].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[25].type" == "push" +jsonpath "$.steps[25].name" == "LoopPropertiesMatch" +jsonpath "$.steps[25].evaluatePath" == "/$ref/allOf/3/$ref/properties" +jsonpath "$.steps[25].instanceLocation" == "" +jsonpath "$.steps[25].instancePositions" count == 4 +jsonpath "$.steps[25].instancePositions[0]" == 2 +jsonpath "$.steps[25].instancePositions[1]" == 3 +jsonpath "$.steps[25].instancePositions[2]" == 4 +jsonpath "$.steps[25].instancePositions[3]" == 3 +jsonpath "$.steps[25].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/properties" +jsonpath "$.steps[25].annotation" == null +jsonpath "$.steps[25].message" == null +jsonpath "$.steps[25].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[26].type" == "push" +jsonpath "$.steps[26].name" == "LogicalOr" +jsonpath "$.steps[26].evaluatePath" == "/$ref/allOf/3/$ref/properties/type/anyOf" +jsonpath "$.steps[26].instanceLocation" == "/type" +jsonpath "$.steps[26].instancePositions" count == 4 +jsonpath "$.steps[26].instancePositions[0]" == 3 +jsonpath "$.steps[26].instancePositions[1]" == 5 +jsonpath "$.steps[26].instancePositions[2]" == 3 +jsonpath "$.steps[26].instancePositions[3]" == 20 +jsonpath "$.steps[26].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/properties/type/anyOf" +jsonpath "$.steps[26].annotation" == null +jsonpath "$.steps[26].message" == null +jsonpath "$.steps[26].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[27].type" == "push" +jsonpath "$.steps[27].name" == "ControlJump" +jsonpath "$.steps[27].evaluatePath" == "/$ref/allOf/3/$ref/properties/type/anyOf/0/$ref" +jsonpath "$.steps[27].instanceLocation" == "/type" +jsonpath "$.steps[27].instancePositions" count == 4 +jsonpath "$.steps[27].instancePositions[0]" == 3 +jsonpath "$.steps[27].instancePositions[1]" == 5 +jsonpath "$.steps[27].instancePositions[2]" == 3 +jsonpath "$.steps[27].instancePositions[3]" == 20 +jsonpath "$.steps[27].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/properties/type/anyOf/0/$ref" +jsonpath "$.steps[27].annotation" == null +jsonpath "$.steps[27].message" == null +jsonpath "$.steps[27].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[28].type" == "push" +jsonpath "$.steps[28].name" == "AssertionEqualsAny" +jsonpath "$.steps[28].evaluatePath" == "/$ref/allOf/3/$ref/properties/type/anyOf/0/$ref/enum" +jsonpath "$.steps[28].instanceLocation" == "/type" +jsonpath "$.steps[28].instancePositions" count == 4 +jsonpath "$.steps[28].instancePositions[0]" == 3 +jsonpath "$.steps[28].instancePositions[1]" == 5 +jsonpath "$.steps[28].instancePositions[2]" == 3 +jsonpath "$.steps[28].instancePositions[3]" == 20 +jsonpath "$.steps[28].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/$defs/simpleTypes/enum" +jsonpath "$.steps[28].annotation" == null +jsonpath "$.steps[28].message" == null +jsonpath "$.steps[28].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[29].type" == "pass" +jsonpath "$.steps[29].name" == "AssertionEqualsAny" +jsonpath "$.steps[29].evaluatePath" == "/$ref/allOf/3/$ref/properties/type/anyOf/0/$ref/enum" +jsonpath "$.steps[29].instanceLocation" == "/type" +jsonpath "$.steps[29].instancePositions" count == 4 +jsonpath "$.steps[29].instancePositions[0]" == 3 +jsonpath "$.steps[29].instancePositions[1]" == 5 +jsonpath "$.steps[29].instancePositions[2]" == 3 +jsonpath "$.steps[29].instancePositions[3]" == 20 +jsonpath "$.steps[29].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/$defs/simpleTypes/enum" +jsonpath "$.steps[29].annotation" == null +jsonpath "$.steps[29].message" == "The string value \"string\" was expected to equal one of the 7 declared values" +jsonpath "$.steps[29].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[30].type" == "pass" +jsonpath "$.steps[30].name" == "ControlJump" +jsonpath "$.steps[30].evaluatePath" == "/$ref/allOf/3/$ref/properties/type/anyOf/0/$ref" +jsonpath "$.steps[30].instanceLocation" == "/type" +jsonpath "$.steps[30].instancePositions" count == 4 +jsonpath "$.steps[30].instancePositions[0]" == 3 +jsonpath "$.steps[30].instancePositions[1]" == 5 +jsonpath "$.steps[30].instancePositions[2]" == 3 +jsonpath "$.steps[30].instancePositions[3]" == 20 +jsonpath "$.steps[30].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/properties/type/anyOf/0/$ref" +jsonpath "$.steps[30].annotation" == null +jsonpath "$.steps[30].message" == "The string value was expected to validate against the referenced schema" +jsonpath "$.steps[30].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[31].type" == "push" +jsonpath "$.steps[31].name" == "AssertionTypeStrict" +jsonpath "$.steps[31].evaluatePath" == "/$ref/allOf/3/$ref/properties/type/anyOf/1/type" +jsonpath "$.steps[31].instanceLocation" == "/type" +jsonpath "$.steps[31].instancePositions" count == 4 +jsonpath "$.steps[31].instancePositions[0]" == 3 +jsonpath "$.steps[31].instancePositions[1]" == 5 +jsonpath "$.steps[31].instancePositions[2]" == 3 +jsonpath "$.steps[31].instancePositions[3]" == 20 +jsonpath "$.steps[31].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/properties/type/anyOf/1/type" +jsonpath "$.steps[31].annotation" == null +jsonpath "$.steps[31].message" == null +jsonpath "$.steps[31].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[32].type" == "fail" +jsonpath "$.steps[32].name" == "AssertionTypeStrict" +jsonpath "$.steps[32].evaluatePath" == "/$ref/allOf/3/$ref/properties/type/anyOf/1/type" +jsonpath "$.steps[32].instanceLocation" == "/type" +jsonpath "$.steps[32].instancePositions" count == 4 +jsonpath "$.steps[32].instancePositions[0]" == 3 +jsonpath "$.steps[32].instancePositions[1]" == 5 +jsonpath "$.steps[32].instancePositions[2]" == 3 +jsonpath "$.steps[32].instancePositions[3]" == 20 +jsonpath "$.steps[32].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/properties/type/anyOf/1/type" +jsonpath "$.steps[32].annotation" == null +jsonpath "$.steps[32].message" == "The value was expected to be of type array but it was of type string" +jsonpath "$.steps[32].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[33].type" == "pass" +jsonpath "$.steps[33].name" == "LogicalOr" +jsonpath "$.steps[33].evaluatePath" == "/$ref/allOf/3/$ref/properties/type/anyOf" +jsonpath "$.steps[33].instanceLocation" == "/type" +jsonpath "$.steps[33].instancePositions" count == 4 +jsonpath "$.steps[33].instancePositions[0]" == 3 +jsonpath "$.steps[33].instancePositions[1]" == 5 +jsonpath "$.steps[33].instancePositions[2]" == 3 +jsonpath "$.steps[33].instancePositions[3]" == 20 +jsonpath "$.steps[33].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/properties/type/anyOf" +jsonpath "$.steps[33].annotation" == null +jsonpath "$.steps[33].message" == "The string value was expected to validate against at least one of the 2 given subschemas" +jsonpath "$.steps[33].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[34].type" == "pass" +jsonpath "$.steps[34].name" == "AnnotationEmitWrapped" +jsonpath "$.steps[34].evaluatePath" == "/$ref/allOf/3/$ref/properties" +jsonpath "$.steps[34].instanceLocation" == "" +jsonpath "$.steps[34].instancePositions" count == 4 +jsonpath "$.steps[34].instancePositions[0]" == 2 +jsonpath "$.steps[34].instancePositions[1]" == 3 +jsonpath "$.steps[34].instancePositions[2]" == 4 +jsonpath "$.steps[34].instancePositions[3]" == 3 +jsonpath "$.steps[34].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/properties" +jsonpath "$.steps[34].annotation" == "type" +jsonpath "$.steps[34].message" == "The object property \"type\" successfully validated against its property subschema" +jsonpath "$.steps[34].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[35].type" == "pass" +jsonpath "$.steps[35].name" == "LoopPropertiesMatch" +jsonpath "$.steps[35].evaluatePath" == "/$ref/allOf/3/$ref/properties" +jsonpath "$.steps[35].instanceLocation" == "" +jsonpath "$.steps[35].instancePositions" count == 4 +jsonpath "$.steps[35].instancePositions[0]" == 2 +jsonpath "$.steps[35].instancePositions[1]" == 3 +jsonpath "$.steps[35].instancePositions[2]" == 4 +jsonpath "$.steps[35].instancePositions[3]" == 3 +jsonpath "$.steps[35].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/properties" +jsonpath "$.steps[35].annotation" == null +jsonpath "$.steps[35].message" == "The object value was expected to validate against the 20 defined properties subschemas" +jsonpath "$.steps[35].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[36].type" == "push" +jsonpath "$.steps[36].name" == "AssertionTypeAny" +jsonpath "$.steps[36].evaluatePath" == "/$ref/allOf/3/$ref/type" +jsonpath "$.steps[36].instanceLocation" == "" +jsonpath "$.steps[36].instancePositions" count == 4 +jsonpath "$.steps[36].instancePositions[0]" == 2 +jsonpath "$.steps[36].instancePositions[1]" == 3 +jsonpath "$.steps[36].instancePositions[2]" == 4 +jsonpath "$.steps[36].instancePositions[3]" == 3 +jsonpath "$.steps[36].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/type" +jsonpath "$.steps[36].annotation" == null +jsonpath "$.steps[36].message" == null +jsonpath "$.steps[36].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[37].type" == "pass" +jsonpath "$.steps[37].name" == "AssertionTypeAny" +jsonpath "$.steps[37].evaluatePath" == "/$ref/allOf/3/$ref/type" +jsonpath "$.steps[37].instanceLocation" == "" +jsonpath "$.steps[37].instancePositions" count == 4 +jsonpath "$.steps[37].instancePositions[0]" == 2 +jsonpath "$.steps[37].instancePositions[1]" == 3 +jsonpath "$.steps[37].instancePositions[2]" == 4 +jsonpath "$.steps[37].instancePositions[3]" == 3 +jsonpath "$.steps[37].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/validation#/type" +jsonpath "$.steps[37].annotation" == null +jsonpath "$.steps[37].message" == "The value was expected to be of type boolean, or object and it was of type object" +jsonpath "$.steps[37].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[38].type" == "pass" +jsonpath "$.steps[38].name" == "ControlJump" +jsonpath "$.steps[38].evaluatePath" == "/$ref/allOf/3/$ref" +jsonpath "$.steps[38].instanceLocation" == "" +jsonpath "$.steps[38].instancePositions" count == 4 +jsonpath "$.steps[38].instancePositions[0]" == 2 +jsonpath "$.steps[38].instancePositions[1]" == 3 +jsonpath "$.steps[38].instancePositions[2]" == 4 +jsonpath "$.steps[38].instancePositions[3]" == 3 +jsonpath "$.steps[38].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/3/$ref" +jsonpath "$.steps[38].annotation" == null +jsonpath "$.steps[38].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[38].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[39].type" == "push" +jsonpath "$.steps[39].name" == "ControlJump" +jsonpath "$.steps[39].evaluatePath" == "/$ref/allOf/4/$ref" +jsonpath "$.steps[39].instanceLocation" == "" +jsonpath "$.steps[39].instancePositions" count == 4 +jsonpath "$.steps[39].instancePositions[0]" == 2 +jsonpath "$.steps[39].instancePositions[1]" == 3 +jsonpath "$.steps[39].instancePositions[2]" == 4 +jsonpath "$.steps[39].instancePositions[3]" == 3 +jsonpath "$.steps[39].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/4/$ref" +jsonpath "$.steps[39].annotation" == null +jsonpath "$.steps[39].message" == null +jsonpath "$.steps[39].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[40].type" == "pass" +jsonpath "$.steps[40].name" == "AnnotationEmit" +jsonpath "$.steps[40].evaluatePath" == "/$ref/allOf/4/$ref/title" +jsonpath "$.steps[40].instanceLocation" == "" +jsonpath "$.steps[40].instancePositions" count == 4 +jsonpath "$.steps[40].instancePositions[0]" == 2 +jsonpath "$.steps[40].instancePositions[1]" == 3 +jsonpath "$.steps[40].instancePositions[2]" == 4 +jsonpath "$.steps[40].instancePositions[3]" == 3 +jsonpath "$.steps[40].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/meta-data#/title" +jsonpath "$.steps[40].annotation" == "Meta-data vocabulary meta-schema" +jsonpath "$.steps[40].message" == "The title of the instance was \"Meta-data vocabulary meta-schema\"" +jsonpath "$.steps[40].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[41].type" == "push" +jsonpath "$.steps[41].name" == "LoopPropertiesMatch" +jsonpath "$.steps[41].evaluatePath" == "/$ref/allOf/4/$ref/properties" +jsonpath "$.steps[41].instanceLocation" == "" +jsonpath "$.steps[41].instancePositions" count == 4 +jsonpath "$.steps[41].instancePositions[0]" == 2 +jsonpath "$.steps[41].instancePositions[1]" == 3 +jsonpath "$.steps[41].instancePositions[2]" == 4 +jsonpath "$.steps[41].instancePositions[3]" == 3 +jsonpath "$.steps[41].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/meta-data#/properties" +jsonpath "$.steps[41].annotation" == null +jsonpath "$.steps[41].message" == null +jsonpath "$.steps[41].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[42].type" == "pass" +jsonpath "$.steps[42].name" == "LoopPropertiesMatch" +jsonpath "$.steps[42].evaluatePath" == "/$ref/allOf/4/$ref/properties" +jsonpath "$.steps[42].instanceLocation" == "" +jsonpath "$.steps[42].instancePositions" count == 4 +jsonpath "$.steps[42].instancePositions[0]" == 2 +jsonpath "$.steps[42].instancePositions[1]" == 3 +jsonpath "$.steps[42].instancePositions[2]" == 4 +jsonpath "$.steps[42].instancePositions[3]" == 3 +jsonpath "$.steps[42].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/meta-data#/properties" +jsonpath "$.steps[42].annotation" == null +jsonpath "$.steps[42].message" == "The object value was expected to validate against the 7 defined properties subschemas" +jsonpath "$.steps[42].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[43].type" == "push" +jsonpath "$.steps[43].name" == "AssertionTypeAny" +jsonpath "$.steps[43].evaluatePath" == "/$ref/allOf/4/$ref/type" +jsonpath "$.steps[43].instanceLocation" == "" +jsonpath "$.steps[43].instancePositions" count == 4 +jsonpath "$.steps[43].instancePositions[0]" == 2 +jsonpath "$.steps[43].instancePositions[1]" == 3 +jsonpath "$.steps[43].instancePositions[2]" == 4 +jsonpath "$.steps[43].instancePositions[3]" == 3 +jsonpath "$.steps[43].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/meta-data#/type" +jsonpath "$.steps[43].annotation" == null +jsonpath "$.steps[43].message" == null +jsonpath "$.steps[43].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[44].type" == "pass" +jsonpath "$.steps[44].name" == "AssertionTypeAny" +jsonpath "$.steps[44].evaluatePath" == "/$ref/allOf/4/$ref/type" +jsonpath "$.steps[44].instanceLocation" == "" +jsonpath "$.steps[44].instancePositions" count == 4 +jsonpath "$.steps[44].instancePositions[0]" == 2 +jsonpath "$.steps[44].instancePositions[1]" == 3 +jsonpath "$.steps[44].instancePositions[2]" == 4 +jsonpath "$.steps[44].instancePositions[3]" == 3 +jsonpath "$.steps[44].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/meta-data#/type" +jsonpath "$.steps[44].annotation" == null +jsonpath "$.steps[44].message" == "The value was expected to be of type boolean, or object and it was of type object" +jsonpath "$.steps[44].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[45].type" == "pass" +jsonpath "$.steps[45].name" == "ControlJump" +jsonpath "$.steps[45].evaluatePath" == "/$ref/allOf/4/$ref" +jsonpath "$.steps[45].instanceLocation" == "" +jsonpath "$.steps[45].instancePositions" count == 4 +jsonpath "$.steps[45].instancePositions[0]" == 2 +jsonpath "$.steps[45].instancePositions[1]" == 3 +jsonpath "$.steps[45].instancePositions[2]" == 4 +jsonpath "$.steps[45].instancePositions[3]" == 3 +jsonpath "$.steps[45].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/4/$ref" +jsonpath "$.steps[45].annotation" == null +jsonpath "$.steps[45].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[45].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[46].type" == "push" +jsonpath "$.steps[46].name" == "ControlJump" +jsonpath "$.steps[46].evaluatePath" == "/$ref/allOf/5/$ref" +jsonpath "$.steps[46].instanceLocation" == "" +jsonpath "$.steps[46].instancePositions" count == 4 +jsonpath "$.steps[46].instancePositions[0]" == 2 +jsonpath "$.steps[46].instancePositions[1]" == 3 +jsonpath "$.steps[46].instancePositions[2]" == 4 +jsonpath "$.steps[46].instancePositions[3]" == 3 +jsonpath "$.steps[46].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/5/$ref" +jsonpath "$.steps[46].annotation" == null +jsonpath "$.steps[46].message" == null +jsonpath "$.steps[46].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[47].type" == "pass" +jsonpath "$.steps[47].name" == "AnnotationEmit" +jsonpath "$.steps[47].evaluatePath" == "/$ref/allOf/5/$ref/title" +jsonpath "$.steps[47].instanceLocation" == "" +jsonpath "$.steps[47].instancePositions" count == 4 +jsonpath "$.steps[47].instancePositions[0]" == 2 +jsonpath "$.steps[47].instancePositions[1]" == 3 +jsonpath "$.steps[47].instancePositions[2]" == 4 +jsonpath "$.steps[47].instancePositions[3]" == 3 +jsonpath "$.steps[47].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/format-annotation#/title" +jsonpath "$.steps[47].annotation" == "Format vocabulary meta-schema for annotation results" +jsonpath "$.steps[47].message" == "The title of the instance was \"Format vocabulary meta-schema for annotation results\"" +jsonpath "$.steps[47].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[48].type" == "push" +jsonpath "$.steps[48].name" == "LogicalWhenType" +jsonpath "$.steps[48].evaluatePath" == "/$ref/allOf/5/$ref/properties" +jsonpath "$.steps[48].instanceLocation" == "" +jsonpath "$.steps[48].instancePositions" count == 4 +jsonpath "$.steps[48].instancePositions[0]" == 2 +jsonpath "$.steps[48].instancePositions[1]" == 3 +jsonpath "$.steps[48].instancePositions[2]" == 4 +jsonpath "$.steps[48].instancePositions[3]" == 3 +jsonpath "$.steps[48].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/format-annotation#/properties" +jsonpath "$.steps[48].annotation" == null +jsonpath "$.steps[48].message" == null +jsonpath "$.steps[48].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[49].type" == "pass" +jsonpath "$.steps[49].name" == "LogicalWhenType" +jsonpath "$.steps[49].evaluatePath" == "/$ref/allOf/5/$ref/properties" +jsonpath "$.steps[49].instanceLocation" == "" +jsonpath "$.steps[49].instancePositions" count == 4 +jsonpath "$.steps[49].instancePositions[0]" == 2 +jsonpath "$.steps[49].instancePositions[1]" == 3 +jsonpath "$.steps[49].instancePositions[2]" == 4 +jsonpath "$.steps[49].instancePositions[3]" == 3 +jsonpath "$.steps[49].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/format-annotation#/properties" +jsonpath "$.steps[49].annotation" == null +jsonpath "$.steps[49].message" == "The object value was expected to validate against the single defined property subschema" +jsonpath "$.steps[49].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[50].type" == "push" +jsonpath "$.steps[50].name" == "AssertionTypeAny" +jsonpath "$.steps[50].evaluatePath" == "/$ref/allOf/5/$ref/type" +jsonpath "$.steps[50].instanceLocation" == "" +jsonpath "$.steps[50].instancePositions" count == 4 +jsonpath "$.steps[50].instancePositions[0]" == 2 +jsonpath "$.steps[50].instancePositions[1]" == 3 +jsonpath "$.steps[50].instancePositions[2]" == 4 +jsonpath "$.steps[50].instancePositions[3]" == 3 +jsonpath "$.steps[50].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/format-annotation#/type" +jsonpath "$.steps[50].annotation" == null +jsonpath "$.steps[50].message" == null +jsonpath "$.steps[50].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[51].type" == "pass" +jsonpath "$.steps[51].name" == "AssertionTypeAny" +jsonpath "$.steps[51].evaluatePath" == "/$ref/allOf/5/$ref/type" +jsonpath "$.steps[51].instanceLocation" == "" +jsonpath "$.steps[51].instancePositions" count == 4 +jsonpath "$.steps[51].instancePositions[0]" == 2 +jsonpath "$.steps[51].instancePositions[1]" == 3 +jsonpath "$.steps[51].instancePositions[2]" == 4 +jsonpath "$.steps[51].instancePositions[3]" == 3 +jsonpath "$.steps[51].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/format-annotation#/type" +jsonpath "$.steps[51].annotation" == null +jsonpath "$.steps[51].message" == "The value was expected to be of type boolean, or object and it was of type object" +jsonpath "$.steps[51].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[52].type" == "pass" +jsonpath "$.steps[52].name" == "ControlJump" +jsonpath "$.steps[52].evaluatePath" == "/$ref/allOf/5/$ref" +jsonpath "$.steps[52].instanceLocation" == "" +jsonpath "$.steps[52].instancePositions" count == 4 +jsonpath "$.steps[52].instancePositions[0]" == 2 +jsonpath "$.steps[52].instancePositions[1]" == 3 +jsonpath "$.steps[52].instancePositions[2]" == 4 +jsonpath "$.steps[52].instancePositions[3]" == 3 +jsonpath "$.steps[52].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/5/$ref" +jsonpath "$.steps[52].annotation" == null +jsonpath "$.steps[52].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[52].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[53].type" == "push" +jsonpath "$.steps[53].name" == "ControlJump" +jsonpath "$.steps[53].evaluatePath" == "/$ref/allOf/6/$ref" +jsonpath "$.steps[53].instanceLocation" == "" +jsonpath "$.steps[53].instancePositions" count == 4 +jsonpath "$.steps[53].instancePositions[0]" == 2 +jsonpath "$.steps[53].instancePositions[1]" == 3 +jsonpath "$.steps[53].instancePositions[2]" == 4 +jsonpath "$.steps[53].instancePositions[3]" == 3 +jsonpath "$.steps[53].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/6/$ref" +jsonpath "$.steps[53].annotation" == null +jsonpath "$.steps[53].message" == null +jsonpath "$.steps[53].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[54].type" == "pass" +jsonpath "$.steps[54].name" == "AnnotationEmit" +jsonpath "$.steps[54].evaluatePath" == "/$ref/allOf/6/$ref/title" +jsonpath "$.steps[54].instanceLocation" == "" +jsonpath "$.steps[54].instancePositions" count == 4 +jsonpath "$.steps[54].instancePositions[0]" == 2 +jsonpath "$.steps[54].instancePositions[1]" == 3 +jsonpath "$.steps[54].instancePositions[2]" == 4 +jsonpath "$.steps[54].instancePositions[3]" == 3 +jsonpath "$.steps[54].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/content#/title" +jsonpath "$.steps[54].annotation" == "Content vocabulary meta-schema" +jsonpath "$.steps[54].message" == "The title of the instance was \"Content vocabulary meta-schema\"" +jsonpath "$.steps[54].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[55].type" == "push" +jsonpath "$.steps[55].name" == "LogicalWhenType" +jsonpath "$.steps[55].evaluatePath" == "/$ref/allOf/6/$ref/properties" +jsonpath "$.steps[55].instanceLocation" == "" +jsonpath "$.steps[55].instancePositions" count == 4 +jsonpath "$.steps[55].instancePositions[0]" == 2 +jsonpath "$.steps[55].instancePositions[1]" == 3 +jsonpath "$.steps[55].instancePositions[2]" == 4 +jsonpath "$.steps[55].instancePositions[3]" == 3 +jsonpath "$.steps[55].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/content#/properties" +jsonpath "$.steps[55].annotation" == null +jsonpath "$.steps[55].message" == null +jsonpath "$.steps[55].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[56].type" == "pass" +jsonpath "$.steps[56].name" == "LogicalWhenType" +jsonpath "$.steps[56].evaluatePath" == "/$ref/allOf/6/$ref/properties" +jsonpath "$.steps[56].instanceLocation" == "" +jsonpath "$.steps[56].instancePositions" count == 4 +jsonpath "$.steps[56].instancePositions[0]" == 2 +jsonpath "$.steps[56].instancePositions[1]" == 3 +jsonpath "$.steps[56].instancePositions[2]" == 4 +jsonpath "$.steps[56].instancePositions[3]" == 3 +jsonpath "$.steps[56].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/content#/properties" +jsonpath "$.steps[56].annotation" == null +jsonpath "$.steps[56].message" == "The object value was expected to validate against the defined properties subschemas" +jsonpath "$.steps[56].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[57].type" == "push" +jsonpath "$.steps[57].name" == "AssertionTypeAny" +jsonpath "$.steps[57].evaluatePath" == "/$ref/allOf/6/$ref/type" +jsonpath "$.steps[57].instanceLocation" == "" +jsonpath "$.steps[57].instancePositions" count == 4 +jsonpath "$.steps[57].instancePositions[0]" == 2 +jsonpath "$.steps[57].instancePositions[1]" == 3 +jsonpath "$.steps[57].instancePositions[2]" == 4 +jsonpath "$.steps[57].instancePositions[3]" == 3 +jsonpath "$.steps[57].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/content#/type" +jsonpath "$.steps[57].annotation" == null +jsonpath "$.steps[57].message" == null +jsonpath "$.steps[57].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[58].type" == "pass" +jsonpath "$.steps[58].name" == "AssertionTypeAny" +jsonpath "$.steps[58].evaluatePath" == "/$ref/allOf/6/$ref/type" +jsonpath "$.steps[58].instanceLocation" == "" +jsonpath "$.steps[58].instancePositions" count == 4 +jsonpath "$.steps[58].instancePositions[0]" == 2 +jsonpath "$.steps[58].instancePositions[1]" == 3 +jsonpath "$.steps[58].instancePositions[2]" == 4 +jsonpath "$.steps[58].instancePositions[3]" == 3 +jsonpath "$.steps[58].keywordLocation" == "https://json-schema.org/draft/2020-12/meta/content#/type" +jsonpath "$.steps[58].annotation" == null +jsonpath "$.steps[58].message" == "The value was expected to be of type boolean, or object and it was of type object" +jsonpath "$.steps[58].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[59].type" == "pass" +jsonpath "$.steps[59].name" == "ControlJump" +jsonpath "$.steps[59].evaluatePath" == "/$ref/allOf/6/$ref" +jsonpath "$.steps[59].instanceLocation" == "" +jsonpath "$.steps[59].instancePositions" count == 4 +jsonpath "$.steps[59].instancePositions[0]" == 2 +jsonpath "$.steps[59].instancePositions[1]" == 3 +jsonpath "$.steps[59].instancePositions[2]" == 4 +jsonpath "$.steps[59].instancePositions[3]" == 3 +jsonpath "$.steps[59].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf/6/$ref" +jsonpath "$.steps[59].annotation" == null +jsonpath "$.steps[59].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[59].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[60].type" == "pass" +jsonpath "$.steps[60].name" == "LogicalAnd" +jsonpath "$.steps[60].evaluatePath" == "/$ref/allOf" +jsonpath "$.steps[60].instanceLocation" == "" +jsonpath "$.steps[60].instancePositions" count == 4 +jsonpath "$.steps[60].instancePositions[0]" == 2 +jsonpath "$.steps[60].instancePositions[1]" == 3 +jsonpath "$.steps[60].instancePositions[2]" == 4 +jsonpath "$.steps[60].instancePositions[3]" == 3 +jsonpath "$.steps[60].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/allOf" +jsonpath "$.steps[60].annotation" == null +jsonpath "$.steps[60].message" == "The object value was expected to validate against the 7 given subschemas" +jsonpath "$.steps[60].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[61].type" == "pass" +jsonpath "$.steps[61].name" == "AnnotationEmit" +jsonpath "$.steps[61].evaluatePath" == "/$ref/title" +jsonpath "$.steps[61].instanceLocation" == "" +jsonpath "$.steps[61].instancePositions" count == 4 +jsonpath "$.steps[61].instancePositions[0]" == 2 +jsonpath "$.steps[61].instancePositions[1]" == 3 +jsonpath "$.steps[61].instancePositions[2]" == 4 +jsonpath "$.steps[61].instancePositions[3]" == 3 +jsonpath "$.steps[61].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/title" +jsonpath "$.steps[61].annotation" == "Core and Validation specifications meta-schema" +jsonpath "$.steps[61].message" == "The title of the instance was \"Core and Validation specifications meta-schema\"" +jsonpath "$.steps[61].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/meta-data" +jsonpath "$.steps[62].type" == "push" +jsonpath "$.steps[62].name" == "LogicalWhenType" +jsonpath "$.steps[62].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[62].instanceLocation" == "" +jsonpath "$.steps[62].instancePositions" count == 4 +jsonpath "$.steps[62].instancePositions[0]" == 2 +jsonpath "$.steps[62].instancePositions[1]" == 3 +jsonpath "$.steps[62].instancePositions[2]" == 4 +jsonpath "$.steps[62].instancePositions[3]" == 3 +jsonpath "$.steps[62].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/properties" +jsonpath "$.steps[62].annotation" == null +jsonpath "$.steps[62].message" == null +jsonpath "$.steps[62].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[63].type" == "pass" +jsonpath "$.steps[63].name" == "LogicalWhenType" +jsonpath "$.steps[63].evaluatePath" == "/$ref/properties" +jsonpath "$.steps[63].instanceLocation" == "" +jsonpath "$.steps[63].instancePositions" count == 4 +jsonpath "$.steps[63].instancePositions[0]" == 2 +jsonpath "$.steps[63].instancePositions[1]" == 3 +jsonpath "$.steps[63].instancePositions[2]" == 4 +jsonpath "$.steps[63].instancePositions[3]" == 3 +jsonpath "$.steps[63].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/properties" +jsonpath "$.steps[63].annotation" == null +jsonpath "$.steps[63].message" == "The object value was expected to validate against the defined properties subschemas" +jsonpath "$.steps[63].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[64].type" == "push" +jsonpath "$.steps[64].name" == "AssertionTypeAny" +jsonpath "$.steps[64].evaluatePath" == "/$ref/type" +jsonpath "$.steps[64].instanceLocation" == "" +jsonpath "$.steps[64].instancePositions" count == 4 +jsonpath "$.steps[64].instancePositions[0]" == 2 +jsonpath "$.steps[64].instancePositions[1]" == 3 +jsonpath "$.steps[64].instancePositions[2]" == 4 +jsonpath "$.steps[64].instancePositions[3]" == 3 +jsonpath "$.steps[64].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/type" +jsonpath "$.steps[64].annotation" == null +jsonpath "$.steps[64].message" == null +jsonpath "$.steps[64].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[65].type" == "pass" +jsonpath "$.steps[65].name" == "AssertionTypeAny" +jsonpath "$.steps[65].evaluatePath" == "/$ref/type" +jsonpath "$.steps[65].instanceLocation" == "" +jsonpath "$.steps[65].instancePositions" count == 4 +jsonpath "$.steps[65].instancePositions[0]" == 2 +jsonpath "$.steps[65].instancePositions[1]" == 3 +jsonpath "$.steps[65].instancePositions[2]" == 4 +jsonpath "$.steps[65].instancePositions[3]" == 3 +jsonpath "$.steps[65].keywordLocation" == "https://json-schema.org/draft/2020-12/schema#/type" +jsonpath "$.steps[65].annotation" == null +jsonpath "$.steps[65].message" == "The value was expected to be of type boolean, or object and it was of type object" +jsonpath "$.steps[65].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[66].type" == "pass" +jsonpath "$.steps[66].name" == "ControlJump" +jsonpath "$.steps[66].evaluatePath" == "/$ref" +jsonpath "$.steps[66].instanceLocation" == "" +jsonpath "$.steps[66].instancePositions" count == 4 +jsonpath "$.steps[66].instancePositions[0]" == 2 +jsonpath "$.steps[66].instancePositions[1]" == 3 +jsonpath "$.steps[66].instancePositions[2]" == 4 +jsonpath "$.steps[66].instancePositions[3]" == 3 +jsonpath "$.steps[66].keywordLocation" == "#/$ref" +jsonpath "$.steps[66].annotation" == null +jsonpath "$.steps[66].message" == "The object value was expected to validate against the referenced schema" +jsonpath "$.steps[66].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# Dynamic references, which resolve against the supplied schema's own scope +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": [ + "x" + ], + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://example.com/d", + "$defs": { + "i": { + "$dynamicAnchor": "T", + "type": "string" + } + }, + "type": "array", + "items": { + "$dynamicRef": "#T" + } + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 11 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "LoopItemsFrom" +jsonpath "$.steps[0].evaluatePath" == "/items" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 4 +jsonpath "$.steps[0].instancePositions[3]" == 3 +jsonpath "$.steps[0].keywordLocation" == "https://example.com/d#/items" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "ControlJump" +jsonpath "$.steps[1].evaluatePath" == "/items/$dynamicRef" +jsonpath "$.steps[1].instanceLocation" == "/0" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 3 +jsonpath "$.steps[1].instancePositions[1]" == 5 +jsonpath "$.steps[1].instancePositions[2]" == 3 +jsonpath "$.steps[1].instancePositions[3]" == 7 +jsonpath "$.steps[1].keywordLocation" == "https://example.com/d#/items/$dynamicRef" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[2].type" == "push" +jsonpath "$.steps[2].name" == "AssertionTypeStrict" +jsonpath "$.steps[2].evaluatePath" == "/items/$dynamicRef/type" +jsonpath "$.steps[2].instanceLocation" == "/0" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 3 +jsonpath "$.steps[2].instancePositions[1]" == 5 +jsonpath "$.steps[2].instancePositions[2]" == 3 +jsonpath "$.steps[2].instancePositions[3]" == 7 +jsonpath "$.steps[2].keywordLocation" == "https://example.com/d#/$defs/i/type" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == null +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[3].type" == "pass" +jsonpath "$.steps[3].name" == "AssertionTypeStrict" +jsonpath "$.steps[3].evaluatePath" == "/items/$dynamicRef/type" +jsonpath "$.steps[3].instanceLocation" == "/0" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 3 +jsonpath "$.steps[3].instancePositions[1]" == 5 +jsonpath "$.steps[3].instancePositions[2]" == 3 +jsonpath "$.steps[3].instancePositions[3]" == 7 +jsonpath "$.steps[3].keywordLocation" == "https://example.com/d#/$defs/i/type" +jsonpath "$.steps[3].annotation" == null +jsonpath "$.steps[3].message" == "The value was expected to be of type string" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[4].type" == "pass" +jsonpath "$.steps[4].name" == "ControlJump" +jsonpath "$.steps[4].evaluatePath" == "/items/$dynamicRef" +jsonpath "$.steps[4].instanceLocation" == "/0" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 3 +jsonpath "$.steps[4].instancePositions[1]" == 5 +jsonpath "$.steps[4].instancePositions[2]" == 3 +jsonpath "$.steps[4].instancePositions[3]" == 7 +jsonpath "$.steps[4].keywordLocation" == "https://example.com/d#/items/$dynamicRef" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == "The string value was expected to validate against the referenced schema" +jsonpath "$.steps[4].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/core" +jsonpath "$.steps[5].type" == "pass" +jsonpath "$.steps[5].name" == "LoopItemsFrom" +jsonpath "$.steps[5].evaluatePath" == "/items" +jsonpath "$.steps[5].instanceLocation" == "" +jsonpath "$.steps[5].instancePositions" count == 4 +jsonpath "$.steps[5].instancePositions[0]" == 2 +jsonpath "$.steps[5].instancePositions[1]" == 3 +jsonpath "$.steps[5].instancePositions[2]" == 4 +jsonpath "$.steps[5].instancePositions[3]" == 3 +jsonpath "$.steps[5].keywordLocation" == "https://example.com/d#/items" +jsonpath "$.steps[5].annotation" == null +jsonpath "$.steps[5].message" == "Every item in the array value was expected to validate against the given subschema" +jsonpath "$.steps[5].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[6].type" == "push" +jsonpath "$.steps[6].name" == "LogicalWhenArraySizeGreater" +jsonpath "$.steps[6].evaluatePath" == "/items" +jsonpath "$.steps[6].instanceLocation" == "" +jsonpath "$.steps[6].instancePositions" count == 4 +jsonpath "$.steps[6].instancePositions[0]" == 2 +jsonpath "$.steps[6].instancePositions[1]" == 3 +jsonpath "$.steps[6].instancePositions[2]" == 4 +jsonpath "$.steps[6].instancePositions[3]" == 3 +jsonpath "$.steps[6].keywordLocation" == "https://example.com/d#/items" +jsonpath "$.steps[6].annotation" == null +jsonpath "$.steps[6].message" == null +jsonpath "$.steps[6].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[7].type" == "pass" +jsonpath "$.steps[7].name" == "AnnotationEmit" +jsonpath "$.steps[7].evaluatePath" == "/items" +jsonpath "$.steps[7].instanceLocation" == "" +jsonpath "$.steps[7].instancePositions" count == 4 +jsonpath "$.steps[7].instancePositions[0]" == 2 +jsonpath "$.steps[7].instancePositions[1]" == 3 +jsonpath "$.steps[7].instancePositions[2]" == 4 +jsonpath "$.steps[7].instancePositions[3]" == 3 +jsonpath "$.steps[7].keywordLocation" == "https://example.com/d#/items" +jsonpath "$.steps[7].annotation" == true +jsonpath "$.steps[7].message" == "Every item in the array value was successfully validated" +jsonpath "$.steps[7].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[8].type" == "pass" +jsonpath "$.steps[8].name" == "LogicalWhenArraySizeGreater" +jsonpath "$.steps[8].evaluatePath" == "/items" +jsonpath "$.steps[8].instanceLocation" == "" +jsonpath "$.steps[8].instancePositions" count == 4 +jsonpath "$.steps[8].instancePositions[0]" == 2 +jsonpath "$.steps[8].instancePositions[1]" == 3 +jsonpath "$.steps[8].instancePositions[2]" == 4 +jsonpath "$.steps[8].instancePositions[3]" == 3 +jsonpath "$.steps[8].keywordLocation" == "https://example.com/d#/items" +jsonpath "$.steps[8].annotation" == null +jsonpath "$.steps[8].message" == "The array value contains 1 additional item not described by related keywords" +jsonpath "$.steps[8].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[9].type" == "push" +jsonpath "$.steps[9].name" == "AssertionTypeStrict" +jsonpath "$.steps[9].evaluatePath" == "/type" +jsonpath "$.steps[9].instanceLocation" == "" +jsonpath "$.steps[9].instancePositions" count == 4 +jsonpath "$.steps[9].instancePositions[0]" == 2 +jsonpath "$.steps[9].instancePositions[1]" == 3 +jsonpath "$.steps[9].instancePositions[2]" == 4 +jsonpath "$.steps[9].instancePositions[3]" == 3 +jsonpath "$.steps[9].keywordLocation" == "https://example.com/d#/type" +jsonpath "$.steps[9].annotation" == null +jsonpath "$.steps[9].message" == null +jsonpath "$.steps[9].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[10].type" == "pass" +jsonpath "$.steps[10].name" == "AssertionTypeStrict" +jsonpath "$.steps[10].evaluatePath" == "/type" +jsonpath "$.steps[10].instanceLocation" == "" +jsonpath "$.steps[10].instancePositions" count == 4 +jsonpath "$.steps[10].instancePositions[0]" == 2 +jsonpath "$.steps[10].instancePositions[1]" == 3 +jsonpath "$.steps[10].instancePositions[2]" == 4 +jsonpath "$.steps[10].instancePositions[3]" == 3 +jsonpath "$.steps[10].keywordLocation" == "https://example.com/d#/type" +jsonpath "$.steps[10].annotation" == null +jsonpath "$.steps[10].message" == "The value was expected to be of type array" +jsonpath "$.steps[10].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# An object instance, so the trace locates steps inside it rather than at +# its root +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": { + "a": 1 + }, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": { + "a": { + "type": "integer" + } + } + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 7 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "LogicalWhenType" +jsonpath "$.steps[0].evaluatePath" == "/properties" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 4 +jsonpath "$.steps[0].instancePositions[3]" == 3 +jsonpath "$.steps[0].keywordLocation" == "#/properties" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[1].type" == "push" +jsonpath "$.steps[1].name" == "AssertionType" +jsonpath "$.steps[1].evaluatePath" == "/properties/a/type" +jsonpath "$.steps[1].instanceLocation" == "/a" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 3 +jsonpath "$.steps[1].instancePositions[1]" == 5 +jsonpath "$.steps[1].instancePositions[2]" == 3 +jsonpath "$.steps[1].instancePositions[3]" == 10 +jsonpath "$.steps[1].keywordLocation" == "#/properties/a/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == null +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[2].type" == "pass" +jsonpath "$.steps[2].name" == "AssertionType" +jsonpath "$.steps[2].evaluatePath" == "/properties/a/type" +jsonpath "$.steps[2].instanceLocation" == "/a" +jsonpath "$.steps[2].instancePositions" count == 4 +jsonpath "$.steps[2].instancePositions[0]" == 3 +jsonpath "$.steps[2].instancePositions[1]" == 5 +jsonpath "$.steps[2].instancePositions[2]" == 3 +jsonpath "$.steps[2].instancePositions[3]" == 10 +jsonpath "$.steps[2].keywordLocation" == "#/properties/a/type" +jsonpath "$.steps[2].annotation" == null +jsonpath "$.steps[2].message" == "The value was expected to be of type integer" +jsonpath "$.steps[2].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[3].type" == "pass" +jsonpath "$.steps[3].name" == "AnnotationEmitWrapped" +jsonpath "$.steps[3].evaluatePath" == "/properties" +jsonpath "$.steps[3].instanceLocation" == "" +jsonpath "$.steps[3].instancePositions" count == 4 +jsonpath "$.steps[3].instancePositions[0]" == 2 +jsonpath "$.steps[3].instancePositions[1]" == 3 +jsonpath "$.steps[3].instancePositions[2]" == 4 +jsonpath "$.steps[3].instancePositions[3]" == 3 +jsonpath "$.steps[3].keywordLocation" == "#/properties" +jsonpath "$.steps[3].annotation" == "a" +jsonpath "$.steps[3].message" == "The object property \"a\" successfully validated against its property subschema" +jsonpath "$.steps[3].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[4].type" == "pass" +jsonpath "$.steps[4].name" == "LogicalWhenType" +jsonpath "$.steps[4].evaluatePath" == "/properties" +jsonpath "$.steps[4].instanceLocation" == "" +jsonpath "$.steps[4].instancePositions" count == 4 +jsonpath "$.steps[4].instancePositions[0]" == 2 +jsonpath "$.steps[4].instancePositions[1]" == 3 +jsonpath "$.steps[4].instancePositions[2]" == 4 +jsonpath "$.steps[4].instancePositions[3]" == 3 +jsonpath "$.steps[4].keywordLocation" == "#/properties" +jsonpath "$.steps[4].annotation" == null +jsonpath "$.steps[4].message" == "The object value was expected to validate against the single defined property subschema" +jsonpath "$.steps[4].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/applicator" +jsonpath "$.steps[5].type" == "push" +jsonpath "$.steps[5].name" == "AssertionTypeStrict" +jsonpath "$.steps[5].evaluatePath" == "/type" +jsonpath "$.steps[5].instanceLocation" == "" +jsonpath "$.steps[5].instancePositions" count == 4 +jsonpath "$.steps[5].instancePositions[0]" == 2 +jsonpath "$.steps[5].instancePositions[1]" == 3 +jsonpath "$.steps[5].instancePositions[2]" == 4 +jsonpath "$.steps[5].instancePositions[3]" == 3 +jsonpath "$.steps[5].keywordLocation" == "#/type" +jsonpath "$.steps[5].annotation" == null +jsonpath "$.steps[5].message" == null +jsonpath "$.steps[5].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[6].type" == "pass" +jsonpath "$.steps[6].name" == "AssertionTypeStrict" +jsonpath "$.steps[6].evaluatePath" == "/type" +jsonpath "$.steps[6].instanceLocation" == "" +jsonpath "$.steps[6].instancePositions" count == 4 +jsonpath "$.steps[6].instancePositions[0]" == 2 +jsonpath "$.steps[6].instancePositions[1]" == 3 +jsonpath "$.steps[6].instancePositions[2]" == 4 +jsonpath "$.steps[6].instancePositions[3]" == 3 +jsonpath "$.steps[6].keywordLocation" == "#/type" +jsonpath "$.steps[6].annotation" == null +jsonpath "$.steps[6].message" == "The value was expected to be of type object" +jsonpath "$.steps[6].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A null instance, which is a value like any other +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": null, + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "null" + } +} +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 2 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "AssertionTypeStrict" +jsonpath "$.steps[0].evaluatePath" == "/type" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 2 +jsonpath "$.steps[0].instancePositions[1]" == 3 +jsonpath "$.steps[0].instancePositions[2]" == 2 +jsonpath "$.steps[0].instancePositions[3]" == 18 +jsonpath "$.steps[0].keywordLocation" == "#/type" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" +jsonpath "$.steps[1].type" == "pass" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 2 +jsonpath "$.steps[1].instancePositions[1]" == 3 +jsonpath "$.steps[1].instancePositions[2]" == 2 +jsonpath "$.steps[1].instancePositions[3]" == 18 +jsonpath "$.steps[1].keywordLocation" == "#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == "The value was expected to be of type null" +jsonpath "$.steps[1].vocabulary" == "https://json-schema.org/draft/2020-12/vocab/validation" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A body that is not the envelope this route accepts +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "hello world" +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:invalid-request" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "The request body does not match the expected schema" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A body that is JSON but not an object +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +[ + 1, + 2 +] +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:invalid-request" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "The request body does not match the expected schema" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# An envelope carrying something this route does not accept +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema" + }, + "extra": 1 +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:invalid-request" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "The request body does not match the expected schema" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A boolean is a schema, but it declares no dialect, so this route does +# not take one +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": true +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:invalid-request" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "The request body does not match the expected schema" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A schema that declares no dialect at all, which the request schema +# refuses before anything is compiled +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "type": "string" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:invalid-request" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "The request body does not match the expected schema" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A dialect that is not even a URI, refused the same way +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "not a uri", + "type": "string" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:invalid-request" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "The request body does not match the expected schema" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A schema carrying a regular expression that cannot be compiled +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "pattern": "[" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:invalid-schema" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "The supplied schema could not be compiled" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A schema whose keyword carries the wrong kind of value entirely +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": 123 + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:invalid-schema" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "The supplied schema could not be compiled" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A dialect this instance does not know. A dialect is a reference like any +# other here, so naming one that resolves nowhere is answered as such +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://example.com/not-a-dialect" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "https://example.com/not-a-dialect" +jsonpath "$.schemaLocation" == "/$schema" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference to another origin entirely. This registry is sovereign over +# its own namespace and resolves nothing beyond it +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "https://example.org/elsewhere/schema" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "https://example.org/elsewhere/schema" +jsonpath "$.schemaLocation" == "/$ref" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference into this instance that names nothing, answered exactly as +# the foreign one is +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/test/nothing/here" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "{{base}}/test/nothing/here" +jsonpath "$.schemaLocation" == "/$ref" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference that tries to climb out of the schema tree +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$ref": "{{base}}/../../../etc/passwd" + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "{{base}}/etc/passwd" +jsonpath "$.schemaLocation" == "/$ref" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A reference carrying a fragment, which resolves by its base but is +# named back as the caller wrote it +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "a": { + "$ref": "https://example.org/z#/$defs/x" + } + } + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "https://example.org/z#/$defs/x" +jsonpath "$.schemaLocation" == "/properties/a/$ref" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A resource embedded in the supplied schema declaring a dialect that +# resolves nowhere, located where it sits rather than at the root +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "r": { + "$id": "https://example.com/r", + "$schema": "https://example.com/unknown-dialect" + } + } + } +} +``` +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:unresolvable-reference" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "A reference in the supplied schema could not be resolved" +jsonpath "$.reference" == "https://example.com/unknown-dialect" +jsonpath "$.schemaLocation" == "/$defs/r/$schema" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# Nesting past the depth compilation may descend to +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +file,playground-too-deep.json; +HTTP 422 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:schema-too-complex" +jsonpath "$.title" == "Unprocessable Content" +jsonpath "$.status" == 422 +jsonpath "$.detail" == "The supplied schema is too complex to compile on demand, so try a simpler one or add it to the catalog, where no such limit applies" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# Nesting far past what the document may carry at all. Framing walks the +# schema before any compiler budget applies, so this is refused ahead of the +# walk rather than by it, and the instance survives to say so +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +file,playground-unwalkable.json; +HTTP 422 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:schema-too-complex" +jsonpath "$.title" == "Unprocessable Content" +jsonpath "$.status" == 422 +jsonpath "$.detail" == "The supplied schema is too complex to compile on demand, so try a simpler one or add it to the catalog, where no such limit applies" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# And the instance is still answering afterwards +GET {{base}}/self/v1/health +HTTP 200 +Cache-Control: no-store +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ + +# More frame locations than framing may register, which a schema reaches +# in far fewer bytes than it takes to reach the body cap +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +file,playground-too-many-locations.json; +HTTP 422 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:schema-too-complex" +jsonpath "$.title" == "Unprocessable Content" +jsonpath "$.status" == 422 +jsonpath "$.detail" == "The supplied schema is too complex to compile on demand, so try a simpler one or add it to the catalog, where no such limit applies" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A body beyond what this route reads, which is a smaller cap than the one +# the catalog form applies +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +file,playground-oversized.json; +HTTP 413 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:payload-too-large" +jsonpath "$.title" == "Content Too Large" +jsonpath "$.status" == 413 +jsonpath "$.detail" == "The request body is too large" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# No body at all +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +HTTP 400 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:no-instance" +jsonpath "$.title" == "Bad Request" +jsonpath "$.status" == 400 +jsonpath "$.detail" == "You must pass an instance to validate against" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# An expectation this instance cannot honour, refused before the body is read +POST {{base}}/self/v1/api/playground/schemas/trace +Content-Type: application/json +Expect: something-else +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema" + } +} +``` +HTTP 417 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:expectation-failed" +jsonpath "$.title" == "Expectation Failed" +jsonpath "$.status" == 417 +jsonpath "$.detail" == "The Expect header carries an unsupported expectation" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# A browser reaching this is told what it may send +OPTIONS {{base}}/self/v1/api/playground/schemas/trace +HTTP 204 +Cache-Control: no-store +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Access-Control-Allow-Methods: POST, OPTIONS +Access-Control-Allow-Headers: Content-Type, Authorization +Access-Control-Max-Age: 3600 +Allow: POST, OPTIONS +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ + +# A preflight naming an origin is answered the same way, since this route +# is open to any origin +OPTIONS {{base}}/self/v1/api/playground/schemas/trace +Origin: https://example.com +HTTP 204 +Cache-Control: no-store +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Access-Control-Allow-Methods: POST, OPTIONS +Access-Control-Allow-Headers: Content-Type, Authorization +Access-Control-Max-Age: 3600 +Allow: POST, OPTIONS +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ + +# Methods this route does not serve, each told so with the same Allow +GET {{base}}/self/v1/api/playground/schemas/trace +HTTP 405 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Allow: POST, OPTIONS +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:method-not-allowed" +jsonpath "$.title" == "Method Not Allowed" +jsonpath "$.status" == 405 +jsonpath "$.detail" == "This HTTP method is invalid for this URL" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# +PUT {{base}}/self/v1/api/playground/schemas/trace +HTTP 405 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Allow: POST, OPTIONS +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:method-not-allowed" +jsonpath "$.title" == "Method Not Allowed" +jsonpath "$.status" == 405 +jsonpath "$.detail" == "This HTTP method is invalid for this URL" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# +DELETE {{base}}/self/v1/api/playground/schemas/trace +HTTP 405 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Allow: POST, OPTIONS +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:method-not-allowed" +jsonpath "$.title" == "Method Not Allowed" +jsonpath "$.status" == 405 +jsonpath "$.detail" == "This HTTP method is invalid for this URL" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# Tracing against a schema this catalog holds is a separate operation +# under a separate namespace, and is untouched by this one +POST {{base}}/self/v1/api/schemas/trace/test/schemas/string +Content-Type: application/json +``` +"Hello World" +``` +HTTP 200 +Cache-Control: no-store +Content-Type: application/json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true +jsonpath "$.steps" count == 2 +jsonpath "$.steps[0].type" == "push" +jsonpath "$.steps[0].name" == "AssertionTypeStrict" +jsonpath "$.steps[0].evaluatePath" == "/type" +jsonpath "$.steps[0].instanceLocation" == "" +jsonpath "$.steps[0].instancePositions" count == 4 +jsonpath "$.steps[0].instancePositions[0]" == 1 +jsonpath "$.steps[0].instancePositions[1]" == 1 +jsonpath "$.steps[0].instancePositions[2]" == 1 +jsonpath "$.steps[0].instancePositions[3]" == 13 +jsonpath "$.steps[0].keywordLocation" == "{{base}}/test/schemas/string#/type" +jsonpath "$.steps[0].annotation" == null +jsonpath "$.steps[0].message" == null +jsonpath "$.steps[0].vocabulary" == "http://json-schema.org/draft-07/schema#" +jsonpath "$.steps[1].type" == "pass" +jsonpath "$.steps[1].name" == "AssertionTypeStrict" +jsonpath "$.steps[1].evaluatePath" == "/type" +jsonpath "$.steps[1].instanceLocation" == "" +jsonpath "$.steps[1].instancePositions" count == 4 +jsonpath "$.steps[1].instancePositions[0]" == 1 +jsonpath "$.steps[1].instancePositions[1]" == 1 +jsonpath "$.steps[1].instancePositions[2]" == 1 +jsonpath "$.steps[1].instancePositions[3]" == 13 +jsonpath "$.steps[1].keywordLocation" == "{{base}}/test/schemas/string#/type" +jsonpath "$.steps[1].annotation" == null +jsonpath "$.steps[1].message" == "The value was expected to be of type string" +jsonpath "$.steps[1].vocabulary" == "http://json-schema.org/draft-07/schema#" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# Naming that operation without a schema stays what it always was, rather +# than quietly becoming this one with a different body contract +POST {{base}}/self/v1/api/schemas/trace +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema" + } +} +``` +HTTP 404 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:not-found" +jsonpath "$.title" == "Not Found" +jsonpath "$.status" == 404 +jsonpath "$.detail" == "There is nothing at this URL" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true + +# The playground operation is the bare path, so a trailing slash is a +# different URL and this instance holds nothing there +POST {{base}}/self/v1/api/playground/schemas/trace/ +Content-Type: application/json +``` +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema" + } +} +``` +HTTP 404 +Cache-Control: no-store +Content-Type: application/problem+json +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: Link, ETag +Link: ; rel="describedby" +[Captures] +last_response: body +schema_path: header "Link" regex "<([^>]+)>" +[Asserts] +header "Vary" not exists +header "Referrer-Policy" not exists +header "Content-Security-Policy" not exists +header "X-Frame-Options" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.type" == "urn:sourcemeta:one:not-found" +jsonpath "$.title" == "Not Found" +jsonpath "$.status" == 404 +jsonpath "$.detail" == "There is nothing at this URL" + +# The answer above is described by a schema this instance serves, so it +# validates against the very schema its Link header names +POST {{base}}/self/v1/api/schemas/evaluate{{schema_path}} +``` +{{last_response}} +``` +HTTP 200 +Cache-Control: no-store +Link: ; rel="describedby" +[Asserts] +header "Vary" not exists +header "Date" matches /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|[12][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] GMT$/ +jsonpath "$.valid" == true diff --git a/test/e2e/html/hurl/playground-too-deep.json b/test/e2e/html/hurl/playground-too-deep.json new file mode 100644 index 000000000..6ce4cfd88 --- /dev/null +++ b/test/e2e/html/hurl/playground-too-deep.json @@ -0,0 +1,97 @@ +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "not": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} diff --git a/test/e2e/html/hurl/playground-too-many-locations.json b/test/e2e/html/hurl/playground-too-many-locations.json new file mode 100644 index 000000000..1a2555dc4 --- /dev/null +++ b/test/e2e/html/hurl/playground-too-many-locations.json @@ -0,0 +1,7 @@ +{ + "instance": "x", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "allOf": [ {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {} ] + } +} diff --git a/test/e2e/html/hurl/playground-unwalkable.json b/test/e2e/html/hurl/playground-unwalkable.json new file mode 100644 index 000000000..d00f3d54c --- /dev/null +++ b/test/e2e/html/hurl/playground-unwalkable.json @@ -0,0 +1 @@ +{"instance": "x", "schema": {"$schema": "https://json-schema.org/draft/2020-12/schema", "not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"not": {"type": "string"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} \ No newline at end of file diff --git a/test/e2e/html/hurl/schemas-evaluate.all.hurl b/test/e2e/html/hurl/schemas-evaluate.all.hurl index 8542139ec..fda8f4976 100644 --- a/test/e2e/html/hurl/schemas-evaluate.all.hurl +++ b/test/e2e/html/hurl/schemas-evaluate.all.hurl @@ -4,7 +4,7 @@ Cache-Control: no-store Access-Control-Allow-Origin: * Access-Control-Expose-Headers: Link, ETag Access-Control-Allow-Methods: POST, OPTIONS -Access-Control-Allow-Headers: Content-Type +Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Max-Age: 3600 Allow: POST, OPTIONS [Asserts] diff --git a/test/e2e/html/hurl/schemas-trace.all.hurl b/test/e2e/html/hurl/schemas-trace.all.hurl index c50250d84..5aef42fce 100644 --- a/test/e2e/html/hurl/schemas-trace.all.hurl +++ b/test/e2e/html/hurl/schemas-trace.all.hurl @@ -4,7 +4,7 @@ Cache-Control: no-store Access-Control-Allow-Origin: * Access-Control-Expose-Headers: Link, ETag Access-Control-Allow-Methods: POST, OPTIONS -Access-Control-Allow-Headers: Content-Type +Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Max-Age: 3600 Allow: POST, OPTIONS [Asserts]