From 05b8f947ddffeab3c6ee5e8495d571c34f0bcd5d Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Tue, 28 Jan 2025 15:56:14 -0800 Subject: [PATCH] test(instr-openai): update recorded responses; fix recording handling for nock@14 With nock@14 the recording format has changed slightly: the headers are stored as an object instead of an array. The sanitization needed to be updated for this. --- packages/instrumentation-openai/TESTING.md | 3 +- .../test/fixtures.test.js | 32 +++--- .../nock-recordings/chat-completion.json | 74 +++++-------- .../fixtures/nock-recordings/embeddings.json | 102 +++++------------- .../streaming-bad-iterate.json | 69 +++++------- .../streaming-chat-completion.json | 69 +++++------- .../streaming-parallel-tool-calls.json | 69 +++++------- .../nock-recordings/streaming-tool-calls.json | 69 +++++------- .../streaming-with-include_usage.json | 69 +++++------- .../nock-recordings/streaming-with-tee.json | 69 +++++------- .../fixtures/nock-recordings/tool-calls.json | 74 +++++-------- .../instrumentation-openai/test/testutils.js | 8 +- 12 files changed, 244 insertions(+), 463 deletions(-) diff --git a/packages/instrumentation-openai/TESTING.md b/packages/instrumentation-openai/TESTING.md index 89bf1cdb..0607db03 100644 --- a/packages/instrumentation-openai/TESTING.md +++ b/packages/instrumentation-openai/TESTING.md @@ -99,8 +99,7 @@ api.openai.com, so you must have valid OpenAI auth set in your environment. cp openai.env.example openai.env vi openai.env # Add your OpenAI credentials. -set -a; source openai.env -npm run test:regenerate-recordings +(set -a; source openai.env; npm run test:regenerate-recordings) ``` ## Filtering which fixture tests are run diff --git a/packages/instrumentation-openai/test/fixtures.test.js b/packages/instrumentation-openai/test/fixtures.test.js index 164d2868..dabebdd1 100644 --- a/packages/instrumentation-openai/test/fixtures.test.js +++ b/packages/instrumentation-openai/test/fixtures.test.js @@ -254,14 +254,14 @@ test('fixtures', async suite => { [ATTR_GEN_AI_REQUEST_MAX_TOKENS]: 200, [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: ['stop'], [ATTR_GEN_AI_RESPONSE_ID]: isUnit - ? 'chatcmpl-AfbMVACkhZbXSJoCkCzhuGjI9hxi9' + ? 'chatcmpl-Aupa6oebo6v8G4l0QcprsBPniQdta' : /.+/, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', process.env.TEST_CHAT_MODEL ), [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: isUnit ? 22 : isPositiveInteger, - [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: isUnit ? 3 : isPositiveInteger, + [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: isUnit ? 4 : isPositiveInteger, }, scope: { name: '@elastic/opentelemetry-instrumentation-openai', @@ -309,7 +309,7 @@ test('fixtures', async suite => { finish_reason: 'stop', index: 0, message: { - content: isUnit ? 'Southern Ocean.' : /.+/, + content: isUnit ? 'Atlantic Ocean.' : /.+/, }, }, traceId: spans[0].traceId, @@ -461,7 +461,7 @@ test('fixtures', async suite => { [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: ['stop'], [ATTR_GEN_AI_RESPONSE_ID]: isUnit - ? 'chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0' + ? 'chatcmpl-Aupa7af1SkrkThXa5ZLNKFvzyDiPx' : /.+/, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', @@ -777,7 +777,7 @@ test('fixtures', async suite => { [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: ['tool_calls'], [ATTR_GEN_AI_RESPONSE_ID]: isUnit - ? 'chatcmpl-AfbMY0GeHGAEkO2CCeaPqeCp10Mq5' + ? 'chatcmpl-AupaAaPk1VYY5tHTMvqzxc8NDoSEN' : /.+/, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', @@ -787,7 +787,7 @@ test('fixtures', async suite => { ? 140 : isPositiveInteger, [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: isUnit - ? 19 + ? 20 : isPositiveInteger, }, scope: { @@ -862,7 +862,7 @@ test('fixtures', async suite => { message: { tool_calls: [ { - id: isUnit ? 'call_ibw82IbShUYxvRG7J6ojeZVe' : /.+/, + id: isUnit ? 'call_ju2Cqzfdrel1ugvEaW0HtaZ4' : /.+/, type: 'function', function: { name: 'get_delivery_date', @@ -909,7 +909,7 @@ test('fixtures', async suite => { [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: ['tool_calls'], [ATTR_GEN_AI_RESPONSE_ID]: isUnit - ? 'chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6' + ? 'chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt' : /.+/, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', @@ -919,7 +919,7 @@ test('fixtures', async suite => { ? 140 : isPositiveInteger, [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: isUnit - ? 19 + ? 20 : isPositiveInteger, }, scope: { @@ -995,7 +995,7 @@ test('fixtures', async suite => { role: 'assistant', tool_calls: [ { - id: isUnit ? 'call_ltrRGOHzmLMWSIRAZImscFEy' : /.+/, + id: isUnit ? 'call_5CHeMESVhk3E23kwKzTFuGlZ' : /.+/, type: 'function', function: { name: 'get_delivery_date', @@ -1048,7 +1048,7 @@ test('fixtures', async suite => { [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: ['tool_calls'], [ATTR_GEN_AI_RESPONSE_ID]: isUnit - ? 'chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu' + ? 'chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg' : /.+/, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', @@ -1056,7 +1056,7 @@ test('fixtures', async suite => { ), [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: isUnit ? 56 : isPositiveInteger, [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: isUnit - ? 45 + ? 46 : isPositiveInteger, }, events: undefined, @@ -1104,7 +1104,7 @@ test('fixtures', async suite => { role: 'assistant', tool_calls: [ { - id: isUnit ? 'call_c70DUNhsnSAQ0y6d8OkyHQeg' : /.+/, + id: isUnit ? 'call_pPFjIPIb7W7HkxCqGdpTIzVy' : /.+/, type: 'function', function: { name: 'get_weather', @@ -1114,7 +1114,7 @@ test('fixtures', async suite => { }, }, { - id: isUnit ? 'call_5XlUHHFmQpDB0GUeNHNsNYYa' : /.+/, + id: isUnit ? 'call_pORZbhSG8VtXET83iaotru1X' : /.+/, type: 'function', function: { name: 'get_weather', @@ -1173,7 +1173,7 @@ test('fixtures', async suite => { role: 'assistant', tool_calls: [ { - id: isUnit ? 'call_c70DUNhsnSAQ0y6d8OkyHQeg' : /.+/, + id: isUnit ? 'call_pPFjIPIb7W7HkxCqGdpTIzVy' : /.+/, type: 'function', function: { name: 'get_weather', @@ -1181,7 +1181,7 @@ test('fixtures', async suite => { }, }, { - id: isUnit ? 'call_5XlUHHFmQpDB0GUeNHNsNYYa' : /.+/, + id: isUnit ? 'call_pORZbhSG8VtXET83iaotru1X' : /.+/, type: 'function', function: { name: 'get_weather', diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/chat-completion.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/chat-completion.json index 4ac0ebed..15d6371a 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/chat-completion.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/chat-completion.json @@ -15,56 +15,32 @@ }, "status": 200, "response": [ - "1f8b0800000000000003000000ffff", - "8c924d4bc4301086effd1521e7adb4bbd5fdb8c91e44413c08228a94349db671d34c48a6a02efbdf25dd8f7651c14b0ef3ccfbe69d49b611635c957cc5b86c04c9d6eaf8ba2aee9faed79be6a5787ebcc3f566fdd57437efb7cbe6432df92428b078074947d585c4d66a2085668fa50341105cd3f92ccbe68b6c96f6a0c5127490d596e20ce35619154f93691627f3385d1cd40d2a099eafd86bc41863dbfe0c394d091f7cc592c9b1d282f7a206be3a3531c61dea50e1c27be54918e293014a3404a68ffe881d35e00c7b9020ccc5b8cb41d57911929a4eeb437d77ba56636d1d16fec04ff54a19e59bdc81f068c2159ed0f29eee22c6defaf1bab3c4dc3a6c2de5841b30c1703adddbf161a9039c1d1821093dd25c4e7e31cb4b20a1b41f6d874b211b2807e5b04ad1950a47201a8dfc33cb6fdefbb195a9ff633f0029c11294b975502a793eefd0e620fcb8bfda4e2bee0373ffe909dabc52a606679ddabf7765f3ab4aa609a409143cda45df000000ffff", - "030097853686fd020000" - ], - "rawHeaders": [ - "Date", - "Tue, 17 Dec 2024 23:33:51 GMT", - "Content-Type", - "application/json", - "Transfer-Encoding", - "chunked", - "Connection", - "keep-alive", - "access-control-expose-headers", - "X-Request-ID", - "openai-organization", - "user-t27sfkqnaatdbowu2i7ij4dc", - "openai-processing-ms", - "210", - "openai-version", - "2020-10-01", - "x-ratelimit-limit-requests", - "10000", - "x-ratelimit-limit-tokens", - "200000", - "x-ratelimit-remaining-requests", - "9999", - "x-ratelimit-remaining-tokens", - "199783", - "x-ratelimit-reset-requests", - "8.64s", - "x-ratelimit-reset-tokens", - "64ms", - "x-request-id", - "req_c9d258baa91e2e3fdd1774ce95ab8521", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status", - "DYNAMIC", - "X-Content-Type-Options", - "nosniff", - "Server", - "cloudflare", - "CF-RAY", - "8f3ab86e68adf88e-SIN", - "Content-Encoding", - "gzip", - "alt-svc", - "h3=\":443\"; ma=86400" + "1f8b08000000000000038c92416fdb300c85effe1582ce71e1786e12e4d65d76dc7a1e0a43a168879b2c0a125d6c28f2df0bd969ec621dd08b0ffcf89e1e69be144a69b2faa8349c8dc0105cf93006b3633cf1eef9f0ad71d5238498befef0f468c5e84d56f0e91782bca9ee8087e05088fd8c21a211ccaedbfd97c3b63a54db6a02035b7459d607291b2e07f254d655dd94d5bedc1eaeea331360d247f5b3504aa997e99b737a8b7ff4514d5e5365c0944c8ffa786b524a4776b9a24d4a94c478d19b05027b413f457f1067bc10a8ef80c6dfadbb2276633239a91f9dbbd62fb7671df721f2295df9adde91a7746e239ac43e3f9184839ee8a550ea691a6f7c975887c8439056f837fa6c58d7b39d5e96bac0e6ca84c5b89566b7f9c0acb528865c5a6d47838133da45b9acd28c9678058ad5c8ff66f9c87b1e9b7cff19fb05006010b46d886809decfbbb445cc17f7bfb6db8aa7c03a617c26c0560863fe0d163b33baf90e74fa9b0487b623df630c91e663e842bbafd1eecde9be015d5c8a57000000ffff03008f2ed28a1a030000" ], + "rawHeaders": { + "access-control-expose-headers": "X-Request-ID", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9094dd3b59308438-YVR", + "connection": "close", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Tue, 28 Jan 2025 23:46:51 GMT", + "openai-organization": "elastic-observability", + "openai-processing-ms": "246", + "openai-version": "2020-10-01", + "server": "cloudflare", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "transfer-encoding": "chunked", + "x-content-type-options": "nosniff", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "200000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "199783", + "x-ratelimit-reset-requests": "8.64s", + "x-ratelimit-reset-tokens": "64ms", + "x-request-id": "req_7f3ca2d6815c342f85128e4eb97d1b68" + }, "responseIsBinary": false } ] \ No newline at end of file diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/embeddings.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/embeddings.json index 62dac477..a72407cf 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/embeddings.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/embeddings.json @@ -15,80 +15,36 @@ }, "status": 200, "response": [ - "1f8b0800000000000003000000ffff", - "8c5ccdce24db51dcfb2946778d51fefff85558d9d8424660167881e4974751fd81e9c8be7c73a5b98b9a9eeeaa53e764464644e6df7ef3e3c72ffff1877ffdd33ffff597dffdf8e5dffefc9f7ffde51f70ed8fbfffebef7ff9dd8f7ffacd8f1f3f7efcedf9ffdb27fff4ef7ff8d31ffff8e7bffccbf3f1e72ffffc973ffee9bf7ef9dd0ff9df2b7fffd0ff7c13fefbadfca388486aa489fec3fbf51eb7defdfbd5e7c33b23d9f376d53cdcdf3f68615e69f3fe9d3e9d991a7475d336badebe4067a39b2e8a8cb8744dbc7fd67b53e7fdb3e53bf448de56b1daefdfe95ad956fe7e755b3b83ee5462da5522e859cb7bc2e9b3bb5153f57ed5bccacdf8b3691da1f37e67bed31e65b4d6e369bc8436bbb1fdfe51d795c8f70f6a6c373daba9d6babfbf53cd35cf295e00e9909c7cff829c2cd5e5cf56cd14dda96a4796be7f414bb93addaab5684bd1abee6c1dfe4e5f0ba5bda6a362f43b563ad9b4ca9e3ec16fc413b799e7876a248d774599f966bfff9696a6add0663351d1ccf78f565b0c3f94e4b3d5df1fbf3b5585b6ea7837efd40afc3a1d09edb0495a13ddee95d6b78b2991b2ff77eb3d8fdf38feb47bba1587e5fd9311356b1eb49fa565e8e65b42569796df2cb54ae8957edca8b69a7c7a75a6b4e76cfdd5a5e3945be6534d4b52a6a1ca3b3734b74e482809a72f90f6517fffa5f06c353e509a5db9c6b1cf5d834eb3669a19bd27b388d8685afdc419a58ba2565531e7946678a4d3a670e9c97c5fd5349918de53b5b553f4ad516ba91cfead525428a32c22e2beff52ac9716bf3f2b04447a55e6d149f7242e2562fcf321a61d37a66f237fbd5fcd90b25e0a496ed5131cd375bab3873e1be62aa2e7d75c6a2bea9c2ceb938233634be8a393bbb9c5e12adbab2853a4641607369754e5b8d8c5914a6362ca939f0a5b40ce09f431420ae66332e70da45bf311f28a32e37dd9a1ada9cd9b20dc93828875235ad279b12a5bc9bb89349b6ed5bbf85a5a8606ad49aa5471f8f7de518ae8e22d939d7bf27cb5a5d143a54dce70fa28d54cca7ed1eedbf44ce2962dcbe73dacdfdfca2b08b6a4531011376f357e01d2aed527b2a9f30a587666af9e57a5c6f1de66362ae8b7526ac46ec4ca523f1f160330e1a3293b5b2d46c165b7851e5777a49b021ef6aa15df81baa6983286d3997c035bcf67ab33ce86af1d8bf773e969d322273bf9d81c6811bd61842c32a7a6e9108a3cf975de16e6c95ad2ab51bc5caaf5843e42b2226dc2b96004f09a8ff29675bc7f34748c3737ee6bca1821e02b8b93890189773ae7485933de5e171dfff6557798e9f2cbcdea93a3557de36d615ea1a4ab96f249cfd89e482a6a38ccf4ef4ddc8772dcc49a7274779150cb73986bc3def2d10b11145e046f4f31355346c8e1dab467b3dcda19cf7a648b37bdb18db1b79dfcecf96d5d4ef3b2dab674e8525bcd384fa7492dbf59ab8a8893239177e264ef1a5ff5f3127272381d8eda0627641dc9d5d493bce3c63ef71aed5442ba92e614a7c56abc97b3340ae2353a5e921e169c28352718a9a7d803ff4fa19ca3617c66534c2851e0b14a0ed68b5209aa1f427b43bc18ab8769f159f6756906b6637de256e796cbd226c291e7f2c36c9c3021f2719f2c179a151c46d42591d1be413ecf5eb3293e823ad10762ac7a28d7a2a178cd0cf15675898c9095b6ece01f0f3fb70edc407557ad48f15e50eca403644c270937abe64833c4cf4225c8a9c9d5b4d24fd5f9a920b2f4ede883dbc6639d0142fa6ceff9de5700a28ae24389bbe56d23df55445f85775a1d326566ca92b67345a89ff314e1c1eb22137eaa714bb38c797f5b402d23caa16eb05b7807e92e588261e0633ddb1cd422ac390be7e216e84b81a893a39701e4569de219602a4fa48b3661dc", - "e340cec6108b37f16bad05bb838e7497dbd95986525128df4afae89e0cd05daa7e703ae237573ebb336a0732ac2cdf57a2502dfe02999616461752161979e8bb49d35d3ef1e6282238b154542fa344d9c99d43cbe90018137a158b2ee65b6cc3d7787f667a5a136a10604a631e03607d97f9ce728bc34ec4430f1ca45dae19436cab941ffc3eababfcfb006dddc2104b32194ca9cb1a174632d56ab9e728884e7215691a3ba70632af15cab86ee96fccf42b5f4ea919ef1899a86da9c30eb4e7e10c444d0df18fd067699872816839a1cd14cb206f139966b6b387f810efa8623e0864503957f81181dffba6167fe8a491d661ec969b15b40d7c06ac2d1f67aded342a163c2dc7e9a2f66abe9541cf8eed12e6c13f0b0c660f6f41dfa960fece4934770e87a12a25f5fe506d8b184595f87a949fc8db59db7b2be96a069e21a37b58eb5b8bbff82c10441c39b3c6fc242a7159a24811cab74e78e9b2d8268a416ab60fae1020d4fb5ad75db5b982920ee75390d5c6a842c24cb6f8200e6e8a18d180c8c2814472ca2449b70815770e45da9695f6fe54b3e3adcc85b42129d3524fc62cf3001a1b73086105fb1ae7b554252a0d7a2f1aa3d28cdddb870f96d6829ea0f8280e2dec9690d98107a1af756fe5ac1ca225ca08026a443673671edb5ab7a6e8d9e41327134c337985c472fa55946aea9c67a3cccf8999cc255814325dcd74aa64848d9d12e25596e8ff0fac9e9d2d53b9c1144b95ee856b58daae8ce53cbd5594515c7cd2582bfd289f455b6071cf726bc4e115ad0003397d4a65393309cfed1e05d0ad96aab5da0d3f944365c6d52fe761aa6861ddc39b05b0e9c9356662bab7ce3606ba5dd913e040aef20ab418f8146642040985a5850504e164d0934e410758f1406349204eaeecbdc38b31242ab45a02b11f03a114100989dde0cc58d295825ec70af62648003f271bc5455c66c34684490ce8a2876f307013c6da9cd446dc1c0fc187a901cddee0d76d90308733271251c9e187b64368b55c4a2399f80befd63d58152843e2e82590375a9448e054f5e1c74df0137a743b40734a3d5e25efd2f60b27f93817389a126bac7a81203b95734638fe3069647d4e8c23f9b239c3237725b8442bc9e4f8088e734fe50e25794e41acb2d97e58e181c0d54720fb20c7dea8f72c21f8573ac73536d2370e98b91f54eaedef5afa2b10c62ad7724811b73e3b58fbf5b0655dac128342718afa6ebbde6777ebdaec395de9b2972740394c41db1b0adf32509ae527b54cab20fceab91ddbc7ca0194164a991b749a1f4e070aed512c0c2401657e26035f05d07815b3521ebe73e0ab2e7efd64d8d0c943dfd8ca003ff2be2ab5205249c6cb950ba07507b266580de169fc3ba6fc456a65981f45f941fbcee46f748219e963b3925067f34b7a424ee27dd4d925cefc9e9b73d4911e43f2e72d8f3dc3e07ea1f5527919651bc190c4657c6911c21f6295df8223ec5246b30629cc20c57475becd3ccf3b18eca413e2d780ae39c07bee2815529e4f46e08d9cfe9063bc00deca2c894845096b6c6e90214e8c5f0305ceb1700740d8bed3925edc16c082f02af0b979ea56eb610da2543582eb13d3097bc3b02fb351e11e3853dbd8d0c2288e971db75b16a8d4ab826b9c25489934e378649dfaae6a7e19894a08420111144b06955d8713b2cce400ebb313e377bf4ce759425754b85bdf38bb5e759f050c363f233ac92e521f47449f0490fc1992fa29bd39a3b9a39c3cab30edc69c529a23fdf9599b2c3d88373d49b48a18b753cad986396754f3f2c8ecc3be747d70776077d5391cfbfc0d9dcf1c55668f6a76ec680719c5364aed6954885cdda84f9e9df9b176ef4a1ce4c30dba469835b32aaa15ac201b143de720e92e71f4c42f807ece8c221d10270f", - "2f41f87098fb124608b0a8eafaf0668e76ab08def75d6bcc15786ac384c5657db5eff11a42af55b68464063b8ae0542cfa7949386a09b24b3c1e1106edd8442d47b04a0f4e74328827c6be913855ba36800c41ab2fb1508e5510d4e6d16417e8f6d86cc0e2c9c949f05e1b7feda38391d5c86250a2d09a46a6cea14562a038110fa8119d7b9cbe656bd71b10e26e2a27075ba5f71c866c74468fd8f1c9da249ea19b47a574af0abff232d037d39ca9f081f15b87cdc4e75cdd315812d80717cd26a253bd3ccbd065c2e94eabc30e650231eb2921298d0374d103ec608fb2266095bbbcefaff8fa45fde5c81c7ac6e12f3cf4edc0b678083d5d50fb7ccc0705ab9daa1d7e36aaef2f07ffb50a63e59cdd7ec56a6b020af8c4e1eea3ccc36789eaf4e45d7cf1f17a58ee1c5771e7a2358040ca5a2f9960bee8bb6075c675e4d0c870b49d925547fc789e7aba837c0019889f74a8b1c39dc9b330c057de0726d5c1d2e175be3d4f3a2eccb72bcc2e970a58f832e4867a974d06946de61a9777c97c3776bf0ca4f05c3151a91269c72f6d6bcb7008bbb37be667a284363cf073773d245f8af9893ddf07968782a33f1d18839e137e8d2a2c79a3b83cce500d686173c8a363c8fbd23a3baf560b1b7f1e2f44b8a5decb36cb11c955e610ce0625618ecdce0104d80dd1f077e7a9372cf3d4b702a8c84cc1a50bbfcab3756b762a3ac4b30371d4cbda9881c0a977b123e643bab84652eedb7949c6eec6290bfa74451dcdb9b2d8e6f0d19daaa6aa6c9282fa7774e187b68f6527e9a752d050b60997ee4fe7ce40f2625f8dd887883865c5b42d6affa21625814fabf96191810e3f2beb717ea8aa0fafe49a25499b13bb38978d36db759851f7e865221935440847183042a62cf26cc1a57c50eee34ae4ab1f0bff0034606bada015aa19bc021b049fc38f8e160928bbc73afeb910545432c3a25caac9d1df2463728ceb33efaae3acfad8503609398588f4d54ac2d480eecacabe49a5fb4953ebd56c52ff70aa2cbc32ed08fb92e175208595264b54d556a7994ed61ffcf0cd8a3c11e44140dca36870399efc30664b621458aa11b62b8b05f4b8531c0fc4b373f593302c855770c498dd640759cc741cba177cd0505d9aeabe57789ca831ee93b06a913e6c56fb915c0ced04abbc58bb00bd07d3c193c515c967491526c2cbbd394260fa777ea4dffeaaa806d34dafcd7792ffabafaea2097c80216ae59e3edf3a02787acd09cca8ec0d6200d7c0e897a20c99eedac14c25daf20eebf1c92c67fec0e513f0fa9d16782d4a28db739e28fedea8fbd5fe34fbceef3fb70aa19c8bb9da3636d8c85837b3ba3ab3c26485a0f1c3c8dd0173c9b82e770a2d54d9ab1d4ea363d4bef1c77cd966c7872199d982a6621e016d2d7ce4718e5d82db8850e1c1f84fa8f4832218f06835f7caa80908a61349d4e560cdb0def6e3a43c96e26711d262e3b86cecb103d19603ce49fef7d53ad77cec2330bfe8692fda69aac580c0d5c6be313cbe4e27d842e3ae961e84de632e400b0a5bd4e3568d92f5b48333200b957368a6e71abdba0aad2287f699f2a39fa29b60beb3443d0911ab7728268176892e47e2ddc01d310497f5e455d52e483457b9526517a9c2f3713c136d5a71c479c386bdad03ab1bc18cda2391f95e558eb4edaf6f98b6d3ba2856d19bfb7deb202a575020a759006027bf41fbaf4383be350ac8ea8a26af38d6be193dae68d4cea63f61bc3d9ce6579f46ae1fa392a103369dbfa072a9dc81e975d54e936897dfe657f1f773f08ad30a33867d8715bf4877d9d33cd88ac29bc3c63165bfaccba8584e83c489b35faf6bf2a8a5159bd7b9216dfdce967e01ae9de47a567de25e3c1e89971ed2cdeca74fed70c9f3d176eb080fa75956b38c291c00abadc308e4", - "a235e8d07312980132763efe82119cd9d0e6512c3c18f89aae9f20d82f95f52a9c7a748836470fafb16a6c85d5e14e72095fba58813b6210142bcb3c055cb2b5e7789d3ea8affe722f76b063a9de4da2cf2ef4b03c6906bd59cc29eba21b4e0fc0f6078ff3a37a75fc4c81f5293cdd66d71762535d4eb36801c86d966ce01860fb93a9eb15e2d13984e473dc62409d37c0f57bbfc10bddaa724faaa057604f8d3eaec708600de32a75ee7c3667c2c89ac747e768b8f82e687e8d52e86492079baa6ff72bcc0cabf23355f725d9bfea760de582148ecf38091c129f2e9b2321961c7a152c431df2abd58569ae4f6d72816e3a8ed9839ae37a66374797fba1e0c80a27d5103d0d99a7dffa23451dd3b9342403f561e9e1cd612ababa1d0a07da165e89a630a6ae22bc993649cdedec6b0d982d6e6040f772eb6d63bf9e53d054bd7b9b733a94f9002b5c67e1161ac1d18a20610b9b2bc41bbcac9e8871c93fc54d71b7226a186c22ee4bc40bbfad310587ece12a1d44c5c97118fc83e90357aeea0e76ec5bd6830038157505b3b82138f55d3fc1426a0d0ce7cce7470a4b1a0e83080753b41805c34299ad143e358f6a9975428c62308a70057ff5f22f967f3df40c3a50b4be9cba03d5176f5bdd134ec35be34225859cb9c1bfa5204869d851c2ac3d6c4adff63b2d03449c0fefa58fce02072fb1ece3ff4417608b8f180b69a68fbc75c0a957cf9e211881590f2c58cddad8f5ff86ea3158a0f0983e0e8b4d29eea7412707fbcd1bd379487374f073c2131d7afbb4dd9a047a0b8ee00f00c748a5a4f5ceec41f6e7b6d77e06531c087c16e5d79a59af75f68534428b8a368599922914c520a633f2edfa8cbeda3b624ef11d8af44169127d917b9294ccb13ec3212b3c07e674ae7d9d21d0a6ce3d5a281099f0d27841480ec7b1d947e43034711ca52d021d6cc7591f18ab41d6c28516cf39cd66536f8f3264c5bef683f5d560f393778084e17d8dbff19f00200e92fe98b23f28ff2f685d953f531aa8822a39b6f4338ee1cb9f39c1b0ca6cddd8000d9bd7fb109497fffb291a9877cd86d8744c7ce667445f76bfdb33bf70014ad7e6093b05c4ce870ba9efd096ad55ee7c0b0a07da709e43679cf971e7612492c79e33b230b2716f5e77b1f5d42d62b9f1169b1ee0c899c98b3e19a9d676ce1011f8a75cad7f820afcd8fb7b0740fdf657a164362c094acd43bd875ed4180f3ff337748d61d4c708797df82fd11c33c1e8c4282c4bc9631ee19c6570abef3d90afb5cbb5b80304900df436b4a30b9815ac9681c192eb7bbdcff4cc3a41dff0095b06dccaaac0282683f208913b0ae3f39ccca7977785ddcfa017cb6f7f6797f1fcc98f4d1f33713cbe67dae16bb51edcd007a6ec994d722a995f1bdfe94ffbde7108b352f342c570b9cca9194dbd2eb1e9f08e5c8fb2a530b3b96da7210c64c2990ef2d5507fd8802afc1e45577d184f02eb15728dd383f99be7f73181cf9938104c1662590c4e1294e45ccd6ee73021b270e4efb7c3355e1e3d85c182610646bd2ab347b56810e17801db41fa9d34369ed75599be73809284ee611940dfcd81f06030cf7e1dc52023fead8cbe35fdcd5cbf2e997e982ef77a93182b7606658db29b409f7e6c3f535ab8fde91562f01eec4cf3fd15fd61daf4cc830d056779588cb619cd739c3f8dfbba2d770f0c1bade01ed97074cf5c260b5e89db91bb70685dd7154f22f8b5515330ade5f289b029e93d2eb981af9abe55373e8ddf35fcfeb17b0e087852ad02ded43e6a4925a23a791026332bbea9aa5f0e35f453ea11d00b2ebbd3a90b1decb0bcbdaa756698ee8e9f03f13f3340d9f16dcfc0e0d39682d0c0a0ab00f595dd48e83ed1c38862bd788ae5e78963eea12e47a68bc45c993aa6d180079b76c2da681d7f", - "684d70c3f833a02735d8b8636a6768efc7120a46453f207b3ab8aeb7013838b5660ff6f7a1771a919501b9c199c93ae7e833e09bfbdbb2cfbc1d73d808fc27ca0c54760ddd7038eb7ad69e79586c8682d0a27358afc449b4338c98d9c39782938007fdff8fbbf99aeeed515c507983c8e2bb6af46bf3d5810070220164e9e13989679ee0d730e891537b993ea8831b2f6a9670982476efe9e016c338e93b26636a778f2d00c3cf8ee1f619e8353c5e9d7bc3beda92ab7cceccd2b5353fe44263f013b7ef74c040c50ddb30ee1ce35199451e6a494164903fc4cb4aebac8c973a6f4d6b9b3d730ed346f398a7ee40822f4791f7ea7ea30fc93faa046603f5f1c92f081ef6a7a4ef7f030000ffff", - "8c9d4d6e25371284afd2d05e834c92c964f65506b3f1b460d880ed8d1706067377235825c31541b5b5322074bbf5ea55b1f227e28bce9cc266230f3eae588d2bb78f56713e878cad0e77d2b5eb1e83772b0517b26cbd041ab06fb8b0c9fe23e9133ff485e119aec148751e3add23c7184b067c9615c64ce3fb78143c00d9a7f61d54dbc2c12d05aa8fa9eb645c181986a286710044f82e025959d6619e3d269f1caa5dbf6ab92cb726f50eb083fcd8e28eefa263eeb387cc6278d97eddc63837d8c4a1c102c7120c93c712cc2fe62d55f2af47f893df729bb84027151c428c6182c73c16365e855e21849cf05cd3df76fc92c001df4b3d3187405f9b6e3cbdce892f9debe6d300dd66ad1eeb802c69eb0985b8bff1d9046413ed0937bf49c162eff6d80e37598c4f781c19d556a0110a7830c186569c11db29af7c94b15a97b61b690c255aca03dd6f134f9c9626c711ee517b0ff7684653482b0c60ba56545d194e0dd4b153f47a18282cb9bd0ea44be889873cf830414fd51162b7ce90f7f3cbf2e8686cb02c9b8aa2260adf1017080ab921fdde86cd4afe071a721e60e2b16b5d87473aeb6c901d7671adc0dbd019627bd2659df57d1d2d3e8b16ff02e8eb47e89357a0380f4c5053a87079b80da01117f862dc3f3a10decfae6cc9535988ed5db5ce786cccfa27dc401013b95593b96022c5863baabe96e8e03fb804ad802795e6fa04223d7a2ede4d55525e640bf1e2a80cf9728b35b5dac3c7c184d8d6ab4748c76ddb9fcc4722b6f9c3588b8881774853818d42eba21f61c4db71647a4315fb60f5a9d79a61f3d09ff792a33233bac2c7818499b204cd9a827c08859846b809720bf07810f1fe09d971edbfc03ad21b7c2c3b0cee6d4e339fa2ee1e10454a6fe7650c050009560679d5d2c5cf8fcfc0e7cef226d7ba3b0e0851125e595a3cd1c268910df10e2d040f1c8ea9578abaffb0e839cc262ecb380061eb9fc1356748014edeecf2f6c12b94a76fe84abb89530ba24ff1363a6c986a05b53597b0f61df0022eb4dbda2051a9d431e747e5f519f32b7aa8e235e807a49ba32616c5ef134c7491b89a09a4c5d1da365d6a201487812cdb1db7bebfebbb6ad4ea520a2e9b4f83e977f82601ff88c9de1bea7e6fd246c7ec52f20ce80605f1064544c818375bcbc5c39c6dabe6899ca33899ac1c1c58209508a3316e1508257402aa9cbb26a32c2dda90562ed47bb908f272f5525d0f804dc664ebd61b18ce72131d9483cd56a5c9ec07ab8e21612d51033503ddb263421fce368f39a231d017816393d0f90d5c4061e4e680bbea6f3fad7fc152b3e2ed558ace392364b133b0e217a9ca1aee021f3edab26120123a817a1cee4fb558047e0e5fb105a9cc1842d26a128003a410bde74787f65ac646387687f0f456cb25d9800b461fc59e8d5d4c13632da6e4c06d41b35882c04fe2e9842183b265681604502153beec3df6d7baac8c8d9be70ee1ac55d5c8acbb2cf212938877cfc55d0afc9c229b181069c8687fd6b2a726f36cdcb8ee22f4900aed645dcd477efd616b313cc8f3d949dc2f98f250ec037b5cae8909a61e3d3e61fe866ea464edec0b8fbccc4f15fa7ee9213c97c936783f0a5c84c24a21e205395d5e8f5935d7236b2e36d3e160bc8a1a73a2abe5e5c880398eea0a5d311febbaeb7e1b70d58a0e1cc68db54cef43f2b65f350892f1540524d39877b2b3a7722ac04016d596d594bef418b8789438a2de139a29d056129ee5301eca5307b140651eecb26d085fa081f6c2a2a9160be44a7ed39d7a1c4388a26b64101a4809999ad0f4f3c328a947b711ac0fb50976c8a14547c4bbfe1b7732310c67ac5246f1ce577772af4769f031b2ef4a47c53d4e5f2ce30eaf2f26ecc9fabbde14dd65437174cbda961dad59", - "a211bfaa85142bd8ec2a8cc4524e9a4a60a866c9eac0c32793278f7772c3de2083a7f40770a5075655ecc64790b2fae602631f163d75836f5c2aaeb99a7c5475605e3563b50a89ff0a1f5d645e707eb39b1b01c72654fd667db9e98e3f31ae24735242b0ba785d588b2dbc9eee9d898b30e52ee16b434f1638c2f915043543e52704118e1790f1b0b3e1d0e081f16915e03df0786a4eecc2afc676f66c1ef6192013243f619cbced109a4c16f89cb20cb73337528e6e7c2d325986967be4e03923e0f7328982eb4dc250643f7de993e1bf673432c26038d1f214750b863554223c2ff00859fca00ff0a6a4ad132a0b57c059b0dbb078125b2b66c54f27d0eb8763184cb74a3284e18351205e6161a9fab7dc3e43965850fb79ff534ded8003d84a4d98c12139c5cfbfdcc4128154d2a9350466415cfbcb74fff8febfc1bc3d24c41913709bec8c99b02408faf40cfcc52f6052748d0a55704aecc777c6089acc740d3c1ccfae08af352e206282d72bc7ce82254fb4fe0bdb5cd67813e6e0ae7c117bc14ed9448eada842cec23346e1ddcb3af0e7798cb12d2492628af754b12d6e931a94deb477345ce682f061aaa64644ae95ce90bd974f3e6a27121d055e841c272ecad9dd72fd026863990c7b6cf9ad590196c0a23cebc8067afe14a427fc0af7cffeb3fffbffeb8ffceffee1cb6f3ffcfcf6dfdf5fbe7e7979fbe587b76fdf7efaf5c797f7ffcbcb4fbf7e7bfbe3e5eb97bf2ec2dffed0d72fffa67ad6817290382bd01a855f33e07417cb41e15193f48f3c98160d710a534a7d68b104498d14c5a94fe9ea1216b31562f40e809c5542b5a33287fa867b6c2c8fd4c3381865940c5d3ca4915cfceeaa58de6333ca65368917068fd8f70b36849803a78e38e0fa78467fddee1d13c23fe2294b5eb8a9821b8423c94c70d3724227bb63163e16a709e05c657d50ed798070fe10c94b9fb365cc661a1918a353ddd90a159e20ef77864c28b663abdfe4a5df524c6df8fba2d9419cda2c862dee2c46f1c8f625de5f00dabcb34c0d63fba0a9286093620205153e8313741651a8ae56d324450943bee507863d6a161e938ec6c37634bf21a161c8ce338642b56ca2b7eabe55f5bca033ca6979f79f0ee6c423947d74195ab5ad53593cf0187dc896142a6841c6625bd1b92a5ad7b882cb0f70041bbf642199604def1a4d4d67bd460e354966c95a7f671a1533a4d13322b84f26ca7bca488f04345b4d5b199b3ca7f518fdd922ee5909225aa939402e83370e3b40de169bdef99fb9022167a68a3010a4e229a98328b7a9f0e9914db27bb62c624e119342c8226844acc66412889077d348a0402400eb9c669998924108786e2d5fdf391dc853196a7a5a25d6fb3562a6d44318af29ce686b51f8daa24513b957051b40da86c50aba3ac7aa2615782f71cc81672f06fbbeb170a21300874fe0ea300a4bfc01cab3ce63f28ec74563a1ace0fbea4245c1b14a03a09e0380a12506ec2e711510eb4d96228e35374f91560d0be9f12c6de9c3722877b4638a27fb9b0df11551f456f7f195c9f67c855d01797a6b7a415827339295930b088c3b63499a2f3e6bb1182a3ada0ad10022f3ce24bc106a566961063228ba36b8d38618070dda4889c42e2b41de6da0f761643a2165543c7c83e93cc43a0a8489a4e7ececb2a9eb7359b9e1cb8916a6c40e0ce0198db2402928e19818dfb300c8da54ec736b929373b546cf8b084ab8f0cbf0de1c3db58dc32e4ed22e079472c17547565f829781aefb79fa9faff735614e9d74381ca0926d89bc4ee9f2a1ab507684540fef9a4d134875cbe9aa118564710e3b692b92abec75ed2a749039ab1f92dfbc4d9a2dc59c6da5b49798e6aae16a24e4535c02c087cc6b0587b3924fc485293ff7fecdb3b906f84065d4b56bae", - "72beb485fb434271d0c74ac4562604adf40aaf6a12448ac46f76b3ccf20c950a62bda6cce48634b154bde590dd39701299a2a2c71dfff8fb7f020000ffff", - "8c9dcb8e25c971447f85e8fd0011eef19c5f11b8a166205080a88d160204fdbb7022b3055db328557343a0d8ecaeba9519e10fb3635fb45474e1c879e5b7bac630b776d413a2a167c36c3555d571629b2db881bc0e15cbd47aec726a7786c7919a2b555614552aeebdb7fd9eacfe79728e88e0922de24457de6d9d334878b6efbee7c88bf12787460147f25da95115bcfa529522c4f0a6e60434359fd1ae0f1fa88d698d7dc5189c361e87c7b65d83d477b39518be5cf31be2680dfdb73a9b32dbbc4fd256b5b338818adb4bd3a4aaa83affab0c8d7553c60c749acf2d52d31d10e6a6658d237abe4996e7ee1e48b480f519276fd86c26a8f80d12b60feacde4b6bc2dd2c481de2341fdf382eb3b3d5661c09cf738458e40a57e07eb34518f10c96564070aaa6681457b98a8e9b86bc3929f5aa4d35c63a6b32dfb590d5425dab51ed328d238cca681d738ff777e535dfc4443ace5397e944ed187b96b89fe1ed6c7b377317d20a0bb62534efac0e2a1bbe300608d6439369b427dbff926fc2ca1eb5a53fd86d3c6caedd83afaaf74cd84bdfb103ee1d2b889b5ae5975fe8bb155b134bdede293f593f3b055184d49ea17315c1acb42ca6cadb7b058024e12bdf5c26d8595698875ad232fd1acec9a410bebabc0c6df76039b9f762839a28dadf076ee3203bd9f10a4989af80174c9c46939d1159b7f70c3143145ebc4daef119e300f1d5b305381c756f93d127f2e391d5d30b8aedbe5c6a3a595f5854832dbf89f126319980e11736f062d94eff6eda78767d35f9b7c64c8bbe9f60f288fc90ed7443f23a54f70c8dae0338177c8d57d4e7895a60769199a57c1ecd0e8bb93e9912a3cb2c51c7a069076b186a340d791a8d812bdf9461221deb08d62e3105a5a12c141b42b8679aadb671806a850b866f46909f4c471765b75908f0cccd19d917dda85c8b225ba49a8db1a3aacad48982fd95803304eb5f5058ef86ac6899c16cfd23860d4c5d4fa6634ada7218efc6a81b107956696fcba350802320e2db6590d93c74b3903ccaa2cac69009cd04a0353a7fe54205d5bb54deb53985a3c60dd9ffcdaa7aae3bab76387159f2594e00731e96482b7f0c9244e13f5b215215ebcfffe08856344946e90b12f9e2278a23574ba9d3196c3bc465f9f76d167b155d65181eb287cacb56db5cd66c98c35f0ad2cf681f52f9b78bd7db6158c35b8d455c94054df92a9f1388f9cd2d76a60fd36b9d96ea901a2c416377d06f90053e14063954b9070749b2d1c338945779699b3cc0bb233a71183d0ed848adac09eef6d093bb34bbb3b190a56b3deac412883394299eeeb7a00adf8d4a878a8f9167233f8350f936090bb6320aa5e54b935eb5c7b2812a47fba81ce9c17a79df57fbda8ab0f56eb6e167c9067d22ca3c4315922ebaf4effa5933bcf87210f2d316dfa07214a0d1794a026d7b30b2b5c99698ca419314c61cdc96560afd249a8f52858d84036c8a4fdc86a7ee0930fda8bf6eb645ce9166d0d3cd146503d4c6e4f9be337a30016f2c58c95dd3b48697dfe06afbf6e261aa5b3bda9bc54ddb00b7d6f6b8cb1544fdd0bf78ac2da14b0bdf5b8e128a08de82065d7d4c6bc63e4556018cfc0b63e6bf758cae5a947df25a70f2357f334d8b6f9f53476d6a3dae6307bb741ee51e359137d69b7f9986c0cc89a40f37907ba0cb35e4210581e86b5fbea434186078e60a8d31dd6e8e2fe70cd1ec98e4bf38d0f67a787bc863e1b7b7d77c1144cad29fcbd995a9d31f777ae519bbbaa938e6ddbd6051845a3eac7f00d58e65a2317683a3e6df56dd32a4cfedd5570dc956a2f0f26b69e1f7b825eb733d1d0ac98bc6472669a5075b392301ee138c21d2d169a85bad560965c9c5cf6d9e95e9768e76ec16f6c9bd453a4178bc4033adc3dd30e", - "958da1b4e894bb9df238ae4b0cc307006ab4619a4d629e85046672a3475223a60555e18e91191931611e48b59ac1178f6bc03ae04aceac71c746aeed98ef3ad8b60d0337c7e7d4e945af4cdd729c489366492da71a01413ed4ca5da6623da951b02dcb955e0182a9d066b7adc155c4c7d5620d3c3a131bbf53620f9b4ed91ce47908d641309825847597a6b591d1b1ececbdef2a66abbd175b4bd466f7591e47ba14d822337875791c9e3a9c21225b5f59c683cb42c4eb6cb98c69cdf472ab2e28295315acfba8c8b7fbf18f02c25ba24ebcb15befca4adffba2a2b065ffb160669af29dde6599aba2ae93a5375c4fbe0d6d9941cf6b0b7beeac6e20f984f66c8de8e4ced3b8066ee65eb418a55c71b6660b0d8d63e66cb885234451143fd7484473dd0c0b16bb73afd7733dbe5f93794e860972fc60165c6ada3525df5387d6354cabcb40c6e85d8932d9f623d7dbe2a02d3c15ec5a9e55e4601767cb4db5716b85a01ad7351c23cec3619e1d88c6755aff80f0d4034290d005a009ebc6e7e8462b662daabf9edcfc0ffa026f02826da98db762aa891f059af2aa17cb764374cc9d670ce63ff0d80e7ac257ec917c6b3246d29b0415ac2b9ba085153314e9e2e2bec33c104f5ac6b08362901760eedb51c2ed280db28aaac862827089fc663bff089c4993b7e76974ea431b1bb25feeb5ba117b99919096d17391ef5bc71349973668cee82b5d64bdf12718e5b803c7af86d180e8d31d237512ccf46f20c85b9b3168e9ab0e67604c10bf3ada5e7d6ae90def6f0e17c6b7d99bcda661b92820844895599461c45bb11c5d89a1d15cc7117c5e2a0b99c0602cfb9c27da9e06de8939d4569fd43b7a92ed9c115af154b422bae53a14293f60e72ea6f5e6615cb651e473b1315703406004eb934a62866366304620c849b9e0ca293a1d73f6f08e84261a31fe2a4b85c41c0119aef8619d646314ac9e43473958daab2cdc7bc521ade97ee83bdc4bb6575b16353ad62e06bfd109dca36200a5ac4292c6a9e8630d0c1ecd649c635a4983de294df403834a476ebc04c5939f593d36731e6e94d45e600b6cef4563b5daeded02466f9c1efafa901e9ae075f5430e569ae67e45f4de52567c645fa58a63b3ce524c5edf3b4a620fb9ee966a86886b0dbb1460839961ac0097dc96e859639388615192d1c34e485b7d7db9c1674fd77d8e1b7c5b469b2039b985745ebc846eb0b896b571c25a7df3b56b4ecb57bc4d210284edf615323c0235f6b611dbf2bf49c7abd374dbb42eb12ce761b6a60c0712cc35cb38f61987da24540f9cab3d08e78449968f50408763b61b7af7a1a376a9a9c979dfee7b58975cba440a19f9ff7fef5f2fae573f79e6ca86b9684c278fba655bd681dac0c6deb8848df44140831b446e67f8d53605137999c1b44377d07d0f53b451b75d22abe79293b983b3b7392c68a0e988a5ec835dbb93c99828f4fe8dcbe3b7eb1eeec544217f34edd30084a7afd03a7d908a5f5bb5cd0bcf40ca319c8f6d5413427bd6b9978289c91f56ce24c222c007b6fdc0bce6373c66d4ae92d4c02ba250af8b182a0813d3cc29068e260cbf3df0d6bebd5068846f9a6f3bab81e10ec93e756b1b05e7859bbf07fa5fb9717a14e3c23574319a7c9798967599cf13389d50590037a94103bcd50c13676d56814303fd5a35bfeeb59d8c81b4c8045f7be3c8941f952b6899fa7b44ed4ed60345efdaa4810fc0d6ae155146188c925e5575da2363ab2bad37107462bc187116e4d6a98f66d86044d1f9e93efd199bce9e592e1156145d11937d4d93b4b2eb8c2d67be4fdade03babadd0bee52ec4b2a056e0e2354524f293d66adbdd4d3ce3364e4cf18ab8d08a7de2ff7a3f4f9698bbbb7eea43f528fd94481afda0357b1fb758b21bfda15ed3dfe727e425c", - "137478fdbdd078cbc9da9164ea968f96cae2a230d04d0b1b87ebd7bb1b3669a3db252b3022352b51f3aa5ed51bea304da96b2759d321866bd960a771405a495f4e58b595ff2cdb2c4332b0073403a5f11aea53c016bbb93076b6c1204cbedd3a497696f2830c0c55f74f5abd0c9b2f90426e5ec6f3c72d9f945984f5d6134abe42e3a1c5ca3b7f3d7410902f83cd325b68d51609e39854b5d76092e812b5c7f368f22c8482969dcba87a598e533dd973b6fb11dffad381e025b7127250bfeb95401f6f14f7330dd5edf04516ec2ba2b7ddc5cdaf6bb6bee86c4d4cc2105dd1503b904238451df5a1277f65cce5f3e3958e6941a3b7bae596ce568c087ad89b068a994f12a624ea2644fefa4d67f13311782d73335c8706202566ea5e9030f26d009bc00968353bad6116752e125390d335eaad99a485618c4a40af3e3a5c80b56a180fee3173c665edbd15bd12185be87c839fb5e83dbb3c8b1e71890188dac6fda6caeea22889d89ba44b4f871fa4c31b1d6c8c1dc6deabbc180ea2ae31d3820e07e3a565f62dbc33364ac269b7b4b94a26a255d70c0b1d40fd6e83fcd01db96665f058d81d6a5a8b49249f9959d99a2bc360fd5379fa1a19165e062bd66f420680b8db6d324c829aea31ed8bafe67db1ac55afd6a7e4e191f31424eff277ae30dd6901f41f5599dbe0875535b8a37ee235bfdc2c5e3ba5f73db5ab7c6d03d7072c3f4d356848e8977ed2642bb5309716434f77aa610ed19a9c74c055141fd13f91a56f63bdbade8e27ffb3d4fc95a7a2f51cee67372de6531e70e3183410e09012f203f35e77f4d3764e713d1e6dedcc0866ed765afb0ef191a0a35fb47399b2c73eaf00cd63a7ddee6bdac74514546b1657d38ac045af77c06f570ac9237658a6ecb0afbdf7286c14ebb7507557e5a260111a0e820bed0a66ed965de76fc6d706a7ba0673503bb4bf30da63cbb3941557513ceab16c1176e5ee11595cc1cbdcd3e159dc5a7615a2ab0c3d35a0c6dba09db7c67d4675acd48924730beb38aff3ff324948d6d80fd492a84e74d9a112a3371602d5bff920cf2e5c597466a47bbaeece6b2ab701a32b650adc1025a824aabd8a2c16c27e039b955d7af0d56452628143fc0c4babdfb3dbb09a00409e491d0607b2713db1426f735d52684efd6058376c5d82d4a5b159d723aae2ffea3ed23cbc38fdac99f32bc87db26e4f5764549d3c955cd4bec6b4c44c3fe55d4efeda62564cb675b6a8a82ba615fae8e867b83a7a56abd32170ae29bfc1c1a644b5097c2d6581d33875ad7269ac1e4c315deb891977c0579844eb607a08a6902e18d083aafb6111683d52c681af992e48595aa71e3c69855ae411c9ad9fff68d3bed3089a758dcbe203b5169cdd8b26a8dc7770ecb97cc83bd05f696edbb1ecb66299e6260b7d0ae25cd61653256fcb563906c8b43fbbf1b16cc7ce18610e014651806a5f7b77eb9c36c7955554493cebb68a9eb477ed75f95d9b668e888762177f4986fd5dc6080093bbf5bae8946a35fcd328d50fec396269578c455ccf5637aebfd74b1be686a92768dd306dca0e78aaffb22fb45c719ebd4fe1da9e8434b2a7deaefd5853e54f0269f29d4c86634a60bdfbb8e2c993ca66f8554c46b6f23ba875ed6978b73ce289980fdd41a024bf6021716e34db4ea29cb21d0024686d6293ff77d34cc6abc8fdc4648da275356b109bba5d679f13f7cb562b395e6a73dfd3c394fc060af328cfe228c9f574e6d576ba32649cd54c221a337c1d7a422857eace0d89bcc772502318f598bb286d6bb8504468a0136248b3e9b1e22fd506c03d3d8098ebacdb197bb4bd2e59a4b0efbab7446fe88f07b4771f01276ab4e6cda4e0419ef12b82a9a11386bec34153393f7fe9bf7d3914addc9ca6637299ff13e7a7aaaf47e69fbbc6b0", - "b00a348436e72b8d41faaa8edc9dab9a69a39c38953dccef7d930230c58c2d2344e0fd7daa166631af75201b579bda1141355b69995cd02ece3da11df6e8e08bd3bb0925f65689246efd344e329494de3c28e7c64a22b68ba3f857981a1d6fbd36cb48b7b63bf070749a80ee2af148e6387a5a2da8a4fa11a8a8ee31fca332dbdf50015f294f44b89006a5aba5062f26a316d5c0fb6462d2ea32d908c4019a72c036c2480ee5043baafb981f69576373e269cbad88678683b61e1f945dd610ebddf8f642cb15a740cca9c9754f14ab1905892f3603cea8fdeb7566b29bb40b9e465db79b465d7bfd1e18d6b596401267437b26695ba7a66b2de443fa3bdccdb3489d48f7c693550bb401d9a952bb13606fe48d6bf35c9367c8646a5c2baef1aaecd40cf5420c49b554bfd2a912b37df7575c75b03fc5d63bcd39d3daa80a38860d5f67f5ef00498c1a061780a366907c2e166bd5f1e3781cf62e9f82e8a7a700b3652be62c111e3f5e551193c494eb08865f56358c107328d59e5c6ca0f71adda9153f730e014eca41408761041a279c3e09017368c85fe9703c9d245a7bf6b66ce02512b8374439522a7a7ed1db2324ed367c59a830e835ac982d83e5ae910f14c39a175a6d57acc288d597b3b6f8347e3f748141dc87d2055a5ca2642fdb8360fb942e7c38a847db9d14cd55c16df059b4de6088afe576f5986edd1f8c0b6c071bc832d380e29b0e4c21e18434b44bafe8edcbf1770ff30f56c6e4b616a880e24b1a24617c82067e36308b3c381379fbbbc094dc09941571977a5fe629bd2d6f199dbf1e2e7114c63675c99ac5009431ebe71e1e1bed677ee53b32dbdd3c1cc6e0794da8b32ea790220a92ea65006489f99d09f6b5f9711feafa81bdb27976218b829a979a8eaa568128719e01352b568699aa31b9f9f36ee09204ca6e5e4b62558a4ab9f9cf66c0b38cf4e223e672f083fab3365436dd56fe80f1b6f1ad18e99735ed3dd079ee2377caa80a4f6b87ece3cd135a3883b2d54047a5101d8e59d59d5e613577354544db45cd8fe5d07e145fc32446331921285a5b7d837083d7adf91d17e9355e65195d0b405617f542b7670f69910fe884dc93aa03d5a7e03eb1eb432f8e599bc97f068231197b05a2dd6940b46411686246237bbc97df58ed9768fa154cd8301ed98df9140de2832f5e999e0f7d6b8083f4aafd094e3933e1d54a01a1d8295af2610bdd9f44571b575f2b595abceccd78562386c1fdd8e9ea1a8a49d3b9f10c42a7c4e7af27be486871a1e97b9e9ceb36a8e92376d50f3379d39df2947b58217050579e9d97bb378347759a6df5b05f61dac8585b2c5f37e3bef240cf514bd539c2802d3c4c5ec151673fc3497256843b7b2e7b1abe709b3a4cefc00cd3888cec4fcd057b67b03828f2b5b3548b4abdb2796ab2ce916731c7689a9264edfa3b8621a1cc2680d502d94d16fae539c5d6665221d910658745719fd6a7185e806ce4b43d67e56eecbe192734609b338ea3dda48a35a99ecd76b90080e4b7e0866b1bfdd4ffac405381daacabda7632676435a58da5143da34512b92fd3eb6ca269712dc16b3accbd56fdc609f8fc9da4bf3a346193126a4e1edcfe17dbe405a7867e711909e6eebf250accf09e59eb71cbaa0b866f4c16999d5cbcece6af821063b31fec8c3a4cc67f5fedbbbab9672986fa747c4f606fb1322918947719f5932ae490892ff898638edc3aaa3a7a7fed3636b1244b15b6307a8a2f87e4ab8ff6b9872e51c8296da1f1717b0d5a6f3d3c31382901310efdaaea8292bbd8fa0520929a0b7f55c7612524a5d9f4ad142fc631219bc8aae5ddb616ecadd2026caf74519d99d5967ea73b6247c6f65f0eac6f70bb727c14bbd81b0ec1c936cf6c2fec456451617a00faf1d02002522feb85fd41276a", - "653537c3fe257ffe6d8a8b2e1f25977e2e1411a6643309fffbd26ee6e6fa1902dd1463f617a11a0313806a356ee62f80c6a598844983809ea6733ae3c0e4944f73378a2d682accf4e5a8874b94c4e49f0f6bbb39baedd1a62d4b1dd6d5c432bf2d78016e6cea5c8fbd9165ecbd145075cad1dad992b7a206576728b581875ece18ddb03f03d6565db63fc715695060e599fcf633c4ddeab0ebac4bb195cf2bbf4d524baa7b9f8689628cdecc4dc4c356148c9da7b8b4982f25e4bdcd7c6886f071b495ad71523c02bbb8f2b366c8e8a831fa29da8713a96610b5c682590bab13bda1abbfdbf11c9318ec62ad1663edd4c3e92685a47ce3d3b6df34ec2d3ddc94e4f886414132d03df4bac009021bb31619205f635d32da11beda3a90c2d0a6bd2c16b455cc4587a0ff182985bd6bf1b251e0683795ec104c7d90843057fb5eabbd018472b6691baaebb8ba6c8682fa641fc6a6835a51e0e81c9f63dc2c79498c91d288dfedfab7ade753ad56ceecae683cc9457e9bdfa3ebd01f8c68e8d6e59d47a5db2e250d8b8bfd0bdf6ee0ac6e567b10c23accf3334a6bbaf3f732e1d9d2aded59112785d01311c0e80cbdf9a2a19d5567e63eb425f910a9e96c593e6ab52f164ebdae4680419f6d51dc843855f76cb32cafdf78df5ea94999ad457e2764fa99ad51ad2b3fb197539f993bf9ab40307137c435dd1596bb5580509df4383337f55343c76738df4b772f63a87694bc4205380339abee03be70cb3c9be42a0aff22e1e0953f1354bf2cdf34ebe836eb25cc4a0ba55b74402d54c0ba50ca1596501a334ea5a2eb7a321aaa8d757a3182eb2d5f34d96e585fc1996579722cb97a98936c76035952e69a930e8be2364ec5c5288a3379177d5058711bc13636c18a5621dd42d3be70b2dc3e7d863aee0d693c4256e82617ba51f0ef391f1e46f56ec4b1d99b437fca0ae24a2840e5bda7e723b709e365ba283f742d11fc41e3834138cdd1f577c053395499813eb14e15539e5894e9a436099d7a5d146357fd043adad96921bfe39308f15ad107e881ef5f218cf8c39a587497700eb4d07c346986cc97e4b47723db3e73629f268e89a92d276edb763048d12c6489609c55dd0301d6d621e76318b10523c94ecb7ef6f08877d0b38be3f516530a65445b27fa34f3d19469d029d80d31be197cdbf4fe9e566cb88ba7345d35cc56c694ddc6210868979d1ccc62d51596956446631bdfe621b5c026b6866b00ab3777acad809f692e068be9020b02b7d447bafbeea96923418cb406d4ac4353d283875c00cd59f021e69704da7a465dc5d4e1bc20f6365f2346633458e3be3bbb0dc5afdb37b029d9748913f86c5c197c2e7b8f96bd28cf831ba06eeb719800c91d7665a9f0298c54d4c05dd9966747a6c04e0425bb7f978af52ce277285ee36790fdfbb5bf9efffeefe78ffcd7fbc51ffffeb77ffdf39fffe3c7ef7ff9f1e7bffdedcf3ffef8fb3ffee5c7cfbfe5c7dffff1c79ffff9e3f7bffcef77f07ffed0ef7ff9275940526eb9640f3a61494ff9891abaf29df0b2d4511d503fdc1914197b344f795e732bdfbdadbeb590a0106fc65e465b885f4366606c3b0ccd751cc83a7acf99b517fb6127b0a9aedba9037750204c90b1221f0b9a43ed656830c2d6176be41a5569faf313fef30e5586a124592d7605c3377c1a463d196429daa4a8a1be91dbbad56ea28bbae3e4ae88e001fe9202231791f6ea2861432cbf659c66e601cd470822fce841bda4c35af6adb3ea9485106b43a126402bc54ae30f8698a8f77c45f9a32f3b8ae76559eac7e864ee9bcdee7c5ba9718ee3cf9feb20e4641cd0da9a4b2ede09fd6fa9da8433c5b249d84176a7b636c6e5d2c2c113d4c48d8c1cfb9628d7a62a84fa6c044158c225a6b26113397fcc2a367f157aa2678c6167", - "edd13928551cd1bbf29d37d74a3165f18e61a9a999a0396d920294cfa9e028f7b609f2c62977a7515ffba2649696d7736fc69a01c552b41773d7659945fd244b74057a8d362e0a3190c4765006e6105d007f46aebf3f14bf55a9447a9252a0f3bc3aea30a2599f7cd9959674d153f71ac0a5b5f0a461b7996639a8e56944bd74257c021fb342a49381e16d1449f0d6c4b0b4344e573218ae5af5e0ecae3a9e89006ea4f2ae4d84bbdb1150a7c785ad6fdedebe2315b6c7c18091282fd6ea61d71a8201536d9c05d9502113048b6663d5d9e8fbb5d226cdc8a20b18d2e12af9e6c27a676fc402dbba5f17a715d98ad66c7d73b1550fc585f6521cea96a9b8969873efb5340512088d9c631018bb83da26c25e3347758487ca365c702ddcfa86f24e2f8cd5a6f11b2a388670f8347b0ca3c84ec3a346db7c4f0ac16cc541ba89f5cef351d1207735f71e2c91de0363b461986fdc05dd4c2a2dc252cd8fd2a1ab7433c00fdad8062f9c56f2f846d28d2b6dce61771ec189d3e696750257314d19dd93025b3aa665f32e92ba3b6c8e40af18cd446d1c4f17ed69001f90ea90c9ab0bee6262c7b312a5d64aa04738c64f57846470fa8228593baded53b935744d5da91d322d3d6432be744412310a36aae6b91ff637f0c9787c0755be69480f777f7bba0a47a2491b46db66089f1b8b9ca1e2a07da8b4e17cb4bab701629206141a63ecff010000ffff", - "8c9d6d8e23390c434f3440d9b264f9fe175b3c2758a0c91af4fc5d60079da4cad607f9e85632b8d4dec462694893dca2e97c09a025aec57a2d56926d199d043e87ae55d9a93efa3bd4da71642f9ecc11fd0fa86696aa7ebe585dcabb9b2bb77a63139bf8f11cefdacb6c9e72c87c0209d14a184530cecbae7f672e4fb2dbdbfcc9e81a15a94d16fd0ca5ad3c806ed3c7610cb95487f4f3f1fb0a0e35edf3723a5e240d3ca6a11f1e44722e2d07569e793cc95e76a41f19387a5e9f8c2f02d0f53618eb099ba9e2d237fac2c516a5713188ff7a7461d18739b8e90f9ac1d7b4c92594245b51ae11ce708939529156e3403b7fd903693edef7d5ac310dc21e68f1db7d8755b91407daa4d4a977b60285bb23ec90ea49cbc7e245ca8f9a977caac7504fd828538582832ad4c6cd873849c73c6de3656fe4dbfbf7b9cc9e3b5b97ea144ff994cdf6d92e6e5d9ac5c575c87e24b8322cfaf88c6160483f443e72893c212bc6d7b91022f56560fdc849bf67424d12b6d2948b675bdc367362161c76698daeb37e6d9a3f2f1d6a51151fdec056ed0cb0391fdf66f5b25ceeba564e7540cd7889b619dd67d90b1e4915ac561ff40aed695c8b7036e5464e283772be1295d25a23f400f6ac538742a9ea313ca75c9d442ead167be81935c6b04655e885356f1a85d933a036f81e689d6a1f9a21c0d8e1c067acf2c300e167d4746d31e901e3df66a9a79e8cf132809f9a2b0b771583a03d8709dc6dfa6ac08d051329b4ae8b9397d661288501e145c46aa7ce7520183a9d97fee9a1b3fad1b91d6632494dd6be6972a9f9a0266b9fa3b90831cc138a356a78b2e88d7b317bff216d4f155ddd63e83a6f7342974ab1f3b0b652f650e69cda8a640f0fc1c1ad5fa5e2b18454253714a4125380d4820c20d70ec23ddb6d916bbedb22ef4998d699ee6555eb4db80805b40cf7269a76db482c674f3b8c514da509dcf73519a9cdb8c3d642d4c8615ad56a5e161dbedfed9e867e73c1ece9b1869106d67e6ee895d98f99eab783e72bb7a9835ea795efffc05f7aa0c9a8c8a21250efa5f9cab39ec7f7cc451bb3acda1ee63c6d50e016303da813342be2517b55e41a6ab165243c2dade5dcd861bdf71b7b96c64c8c9cca80608ea56ea13571669974d4eab32f89336c4c092fe3182911fac2527e39ff64e867ba31f48eea89b5a767cd5c5baa76f680588ebabd465e49ae0a40a2566aa5dfa8579fb7c8e611a6dfe0bfdba6613e16c48eae65781afc6bb302286018d1dbf612f7a4e6f8b404a8f3eca5fe4074a3f6985e50e1e3a73ab04763f3d7cc36050ddd9a1ed557c12ee7c7eba0ff96c8e685cc825862bc12725eb4a725e3f6f451b55ad4dc8ff188db12065fbf53927752b71f09795ae37d93f6c2207bd96fb91f030192b19050735bb21b2ad26383cbc5b33adac6f4982574443bef98d61ecb7dd4ee110cb85b6fffdc9e14cbf4e012347eb668043ed8ac8acfaf2234ec463d2df3309ead0200a4a9a18e0408b64b89ec01c8c0d813400ef77259e2f05e0c1db17dfb91e1bd14907223e4d3489405c311a9fe9866785ead988d166da1f239d5c6d89af66bb7cce7f93ffd9233f06d50b43826b7d9bd7f0d7053e79811583894e705b842051041c8f4b10116a5f1506eddb89c755dec9ddc1ef6366f66a1ea5b370f97a62e124d36eaa810b09a96c824d23546ba1a7a3fd39642a3d60abb092172dbaa20ab2fd6c20c94f9530af34de2933ef1bedd93cd989e9961899eeba31934d9e98ea366f5bad61447168fb9cd573066937269a3d51e2a84ec788cb1808fe9989e8aa08156c923c964eb5837770275a48ce7782a52e59deb6236446f011e5a68ab18a13d261973dd36d4fd3221ed04fa90faa0e1b5aa6c552ccdb40043d636c7edfc057ba52cdb3b6b", - "da814730f0d65f242ee95e0fb28a3954400383c1221ced07f94c28386bf41af34bf8eb8fa4e450f1e41a2c61d506d75b15672c11b82f9641de0eef951e57b4811ed08cea4d15d6a3b22c17e1f34c19e38d0bb7f46cadf0adcd9cfbf1b486c2fdd1d6b5d106a78aa05e27176c059f650213cc9863db0af420543435fd5dacea917d98a8c82a07465dea0894ff3b74aa7625f24aa78a0e24b74b5fadedc6d5ab6fb675fb41f36bad60124212d636beaa3e1a6f94a206a15ae869eb9de0ab3eeb330bc9bd532286f2867c977efee5363e765e3f93023e0df2b1a9e25c39fa5860c79edb08770be782da00e1732baac84ad1af6f77eabeec8af6b5925a874b514524242cdb3dc5a4fd3c4f59602440d8e5dac2353c1d91f1d6987eb957215ed35b24e91cb473ac0aee0caf6687e6dd018b9ccaa54c2487b6f440c3f02883f3f2997d8a3d9916bb7f82c95ff53fad59fd77fcee026eca4a3a2e48b762bea9faac62a66e18afaf4c8fe2f71de1decdead4f6ccb4cf4ab1c2d7659d3e54df655b71621bb72558b33954f303d8ed9f2949af838a3f5f3cd7aaa3cbf611eb78ca12a9b6460b1e77ba6e81e187799d96da73c014f1578c688de1bd76b77b1a581c458c5ff4ab1fa92afb426ba1986fcbb86fde0037bb52031b4fdbdd75e7d82609aabbef5db6b920cda4b47e5c4749347f7964b1a53e666f677de4998e0bb3b4194e2801b6916639f95b54e328d81e4bed289c483a47be99db5e582d028e4de54fcb35fd448ad82a2b62b2671b572815661f0535c7dc5695c0395a0f83d860bbfca6b985ac01c5667901115c5636341d60a5a48827ebf238e682a449eb553ede629b85e12e378e23caa4d6d4e0989092d4decedb6f7eb2d7afa099e5e863380fa4ba36532cb0377d62d9f1a86c74cc6e9d86131f3a2c2c15a0dd784c0af160ed51eb06945da3133c7934bb870df83250ccab96c066f95f39d13228cd0436a6472cb1f3f63d8f1d24beb97705d98eb9d644c9fa8170568e65b22ec4e80a228dab4796010f8b0cc37d322cf0bce05e8fe958461cb6aaea4240086159deaf737cd60027552e009e22871fa4c0ff94d5b84fb5f3155890c548d32d470d0fd6c22b1465335ee467cbb05148a7972ed4aebf4ba95cc152d236826fcd18d15ce519b0f0551de0b2f0d01e914dd6d83f41c39f91f8aeb2d834469276e4a1a29c16830be5d7afd9814ccdf8aa31f7cf58a84f7b5396570b0cb6ed7c5e632193b1bf6bb499955743f97566fc7a31f21f627d0c1613f331add124cccd4023efc30352327b78e8c3f525a82ea9e298c866053dbdfa4a6f5489fb1d60256f5bdb1fe43ffac9ce669c65714b0c2074dc7bfa511cee04a8a1a7012a5beb85390b7481fb3a147f17794744698ac58c8d8b5e9fb55c59e68a61706818505fb5fccfc3187ae78c4570813e57d58fd6c09c6e906bb56ce8f62c3fa4d01a96f56ce2aada0d9a27bde922c3c9b289e9f0faf1da4dffaeefb54ff5e4912a4f3f0aa676c7d29fbff6f3e46a9cb0daa3c6b19c82a8a79e97a2f2b2c82dd4857abb212df88aef361a467abd040c59127dd60cffa0d6b929754ecc438fb0b6fec87346a5455b4089b2442e9e72e8adf6fd5c46a9e6b64294d2ed27982628e7e5f3e9b58d0372e3e5f541c3a3b70df5dabe529c7ddb3d33541e3389cf35211e9bfd29fb31ebe23e87df46bae238e33146cee6a290af30d81c84a54965b90f9a60061b6ef0370d8b09a363a9b4ddc9d9f3c5fbdeb35817fe8ba4d97d6df7cbae696abc228723c3f652b45e8f4fdd78be6d486972b0cf880d6e8e59c076cea9f95504f69da3b85e5af3340f552378b0981b6a5feb718af222bce5bf881895c90dc0a766841b435145a462af745cfeb979b7f226cdb3cc530f8cc5c43979761a3cf3160c2a78885bd19aa13f87", - "39efd1964d9bb2fa22fa036a9aad91c6142caa58e285cd30642b180ee76ad9b5fe05817059e46f2bdb3fcf7f000000ffff", - "8c9d4b96e3300c03af6489a428ddff62f3cae95e0ca07999bd3bed38b23e2450788b0d27b695205ec8d1a3ca987321c351246f0bfd60375d9a6e88c0a4ac8580dca68635abde8c2955688d53cb631c32addd8482f7d2f40784a22a6cf498fb92ea73b3408d35aacadbbbdc9a7a59f14684c69d2179eb0b836247292c3556c69d0477b4f08693c35c93348733edb9c6ca6798dd0d83e673c6fc5619ff542b503debe8e6103bedcad80a33cc576dbb3563b4a0b55ab967037a195a46227c574556b3b10569c82885e6f6d84398523a62ebd40e37725d2dcd8317cfca407e78f8793fd0b01e235d32a1e9ed3669c3db9892fbb1f41c4e6a46e2c5a372f41930b8974a42a3086cdabe80769a7e917a4d4e85b14ce24b2da691cae571e639619b5fcfec3f08a3b10c8642ce65eb6ddd55df54b6a78639b802f72724e39435de2f2fd22b5fd4fba7e4b34c963676c1b3d15206a81e6d12138a34cbe86ee35881921114d373ea0ebfeca327a8936d879a4b7b2de60617a6a50d66f951db6cc28f4d9b684d43835b62f76352b1ce794855320bfc0acf7b2eccaf5ab3b98a3c00ef4c0d069c0b10bbfe3d2609f2c1e23f1cb16f06961ee1eeddd88b876aeede96a0046d77db9c77d120d73ccb027827109b651348668756024134a952f8c171a13ef53ac5eaa0dfbcb144d9b347fff45886d99bf7f84513fbd93d17126e75a88c9196140c10feb41d262f02b4b75f6d22097830598ebfc536e531b935b4f993ddbdc3a4aa2401b6fd2b1a0106864e3a68da9fb8616ade0c837dbe7b3aef3d8b795859a52f988c4615d5a2d9b00c510a85dd7656c52a9bb6e5186bf5df08a3774a7dd37be7b7cffd2c2ba8fa8d6a52272daad35fff5f46d749cfa8ddf1285faa3acb85cdbba7e1f4af0a6e90c661c4402809d33ae1d4afb4e56d8af25ffc037232dd7114b86325dd98dcf1dfbd4ec3d57cd453b0726caa441fa12e7b2852bb6c934c725359b6cc555c8bea65ea1a3c2324e8f4336155f534c74c139eb58c5703a07cf9b5789a6416a5ee63ccab9d65c75a68ac8f2a3a5c5effd112c05db5021a4d59db1b20ccb6452c0ab48aedf26f67d5c4ded43669b2e2b79e21279d700379d379035be8729189384bb9e359cba4554648fac9157d28a79ae232e618d6910898156e483f3b86863e53727c2c50d06c709f61b7dae1394df7417ef35c656aa5abf883266af2f2c5171be27b6d1014133a2757e4393acfcfc2dda82181413aafe6dacc188fc9db0aa86e1abd8d44445de6a9339af924f2cdd750316ff5504f77008e626cfd010000ffff", - "8c9dcb8a6dcb75447f45dcfe857ccd9999fa15e38eac8b91c172c70d83f1bf9b916b1de31d91a5aa96e070746ed5de6be52366c4887f78633e7a3e6c413de224259b1a4db49ffedd254b0c7b3ba804b5279eb9784fb50b35fa04748eeae18197be9065dacfb500eae86f90a8b5daa9d56aa9d6ae12ee59e4f6b854de3ab1e35e7550c53806e7a3b1e7d8689641305a367328d2fa0bcc5ad7d339d338d0fb08521635a8f9c979fbe2d72d33a858dce653ef6988f1eba083b9e66c9e93a7bfb2ff8091737f5e6aac98661542e4eadb6f15b1a73ac980f46c2560d436ce315856581a882e05337d2a3c8992ef325bfd1e27c34d799774d32394a161d6710105bce497b953b96cfec6ff03f3374cc365e702da6e0ddfcad1786ecbc427a420ed8d69c3bd5de53494292909a1ad68a1f5441faa3ea1d9d5a4ea8af735be3597bd74cda64bf9a08b7ada6cb81339350bb849cdbf5fcf8657dec3736588683e319e4cb90c675df35256d723eab239220003ebb6c528640a381d6fa90c4a2283ba3fe4aa796bd0436a1d3f0205c1622f464ebd7eb00cee8a3b8dc769b1323301432f1b84b31ff45535181fb461c44fa2436b731bf646b4515baa8d3cf7e028e72e810e28f0bb01ebdb42b09aa2da81e02edf5568e06b0ed2126ad4914be943d12f2216c901553e5a8c62962368e3a008acf27dededfddd17f4ce2f9782d9ab261d98a6398fb98bd2666fe4b4e3c332691612f31e7aaf5dd98929a8acd0aa8a5a5141441b4c0bfdabeac8b8afdcb3793520f6b6fe1d3df5ab8c02739f28a1df615b74d2d82968427350b3c1dc84e80de7952dc29eb88d9fd3dcb2546f34a3e6f7592e60557c11361a1d072bb82c4253b39b89648ec121d546fdbbcc0c9fd681eeb792fa59499c585c4aa91cbfdf782d6f5e652fdf5ac270e5778eedf19feac1b16cba076c61b7fdee8b29e8ef5f6157e9d905dca5eb4cacb038342ea9302993040b2ad7b02b7eff34713eebdaa0a7dd4e19242247da8fb1769b3a41a8ed14a53b27a928f21bece3b2cb700942e92aaaefc109d894f641fe5133cd67dfb1fc7944da9bbef9246bb389d10e4b7d30daa2dbc3081a3596a5fc0e9c4eaf1b7bf5bc245bb1c99858b66b6f76ae274de2de0650a779592d3addd7e63abc61a1277f6f7db3e0bfc794b65738c221861e6c03fffbb026e5e11d3d740ad43ebe43485cf3bacf953583f249196c6863e9e35e3aad2f4646e9731bed7572d0918bd16ddcd396aa2e78969a9166fbc0e1aaa894bebd67ab640716a84757769a50a9f254a62c7b286ac782a3dfdea2aec5e331f59c8a95005ccf57609993dcd568dda7c9c65a7ff6a020c86cd65471b8a0d43642be3a1e9341a87e6676ed7f0e7f319b7280fd7675840b023e9ac6895d8756a17c41359d31b39b44a281a8e7844574a7ebf1247893f56e8615ca581a1c496346d53a9dd5c876dab730b7f583542c01abdbcbb576570f8792081ff7ff1ead6aa6af67f5a2063eada671cdebcc312a9be2d031ffd8515c6784782f66119a2776d563e775c05ccba24256330d0cf43f373efc186ef4c7901eba95dc93b5f76dba1c9f61bab1661b1db0c6eabdeb3bdb51ecb5bf16e3418b61d89f8b051f8d2f3545c8a3baf4fba70fdb883783b6609dcf95531e26dfe92cd1a7755cadae749c16086166b22f091dc98c5d4975d8361bda0e8efdf2635db0c2767cbcf2bd5e32f576bd8487dfd50a9853df627d5fbfdd6e519d7ecbfd24342bba7369a5cadd3fc495a587769c05d972ddc530b4546bfde4eabbf7b456fa608336a74dc7bb693697586cb13ab85bdc34ad99997096127547a74d42ffa650579f35a0c5da43846e7024cd3e17ae826a03440cb5a3f62110976cdb0efc87f9200ff7f52dbe321398338c351c9d9546b347fd1dd517", - "e61276703c70098b3e9c27c38162b4ca743bcf76bd0f9fc66fa376e087699fa0bcfb7cea691319580dd43dbb4ab75bf295aa76f5555fe61aef6962662828c9ce735fd273ee0645c3c2bd5de8d3f8379e197b6bbca7d69a552a00cd69b1fb5a1641666cbab6dfc72fdcf616107d34ba3157eea696a2ce5fd50e3aae69450109b160cd59d7f1454a6cdc47a6d5349c322d9bc80f30de5b4720b5ceb1ed17b8d0b66f9d225480af74d3e7ecee000f9ce6f6a59e68b496e4d07fa41763e0a4b3aaa9a69d30bd8d146e493c4283b4ccea3bc0daea59951691c6c83fa9a23a7e0054a98da7c05041c8e99e711db30f63a69784f1aaf7c436aba1ff0b5ff7b03dfa8424bbb5d014ee8fd5d896edf0397fd44a00967f97b009e906c6653608929ade82717ae16c1ad8a8e8d3db5199275badbf5d54d2ce6aa71a4f5dea4f461e9bf1af956e1c6cba4e24c9689872b2d8ee155a4e37b075596d9cd9f32796f3a83d9ac35773541d1c52a83942dd9c03d95123ac68e2daaadbca259f7535cc5375b1f55444795b2f5343b96d571557b13c1968f71df357b5148327358beb20f7a720f70664cd322a3e0dbd76887c096deff5ac68dff893ded2eee897785f5269a70f55efbb35239f5fe1d256bbf3ee1c62d57ee7837dda82eae8d027508340bded7dc347ff6d4ef411ced0dea79d2b677788cce8a92ed3c62558170cb5d0bfd875ea47d5c48f9c3f1482c3db3bf427e5727848b7a6fc4d0575966c149d6e076d0e1b6d61b42bc52a1d4883b65e753eb8c3634a7837e39b0cff73d4c3153ed58de5998917d45b8c135be9ffb53a3c66817be9c2267ae83b4caee01564e7d923aab9c7e9445c71911329c3d4c171ec628ef00b3db173914b23f2b57a9e36dd6631ba6a286dd090a43e692b4efad2d158c8ed8431f2602a176be821f9d4758f450662226d5ed3692d81acd99b63a0ae6fb014b440a2d7a5d73068fa9f2aeb7ba861cd56a7651bd354dade1671475b7441b8dabc74f769555b831086cfea8845aaabbb25b29ff69bc3c208afe0a52548b777af957c6c5c359451dfd184d312bc444e4de3ba55ad7d055aabb5d7b47e6a44a261752d737853caed6785e46e8635aace946977af3ab9ba7d1a5aa4f685469f3114e17aa76d9ed5716ca369d8a0e2cb9f00bf16272c3be5814eb3d700bce832237d9d79387a3f814155844213edeff27cdd95864b3d2831b6779fdbd5ce8e477284755b7cf2a4deeea3768121f71a39346e475eb45a318383395e20c42846281ed4cea4a7f96754b5a6f09d73cb6adf0da3dff6ee3d34e694b19a9a485ea1227ee23a6eb0b694323b4b6e631331f2b09a74bae7c7e5709963948b7ba0ee33ebb70b686eab40e77cca495a8f0bf4d09b210b2cf6f4959afbcdfe46607ff4e5c8ed012aca38aa79976f1a46056b96e392125d349d385a784c4b9a2210169bcddeca85d85b87b77c441fcd30ea647ae915d7ef2d9f2625bdf30bfdee5164490178be62769d0911d631d9f01afb3fdd48f628d7a13512b56c1c65fbdbc7e839b511ad2b0649ca16162e67de9e7677a91552920b87daeff02268c9c799c638b6ee8d85d6b3e65db610aacd0f0553d2faed1dbaf18b8396766cb8baa4d8b1b21af87b15fd43988c8434edb2c84926ab4a54ea28bf7e30cf3f309207c9dc9c96d56d6c15d3be19c3959ddc574bab33e1dc4480d522f33727662b2789a0075a3abafc3c5738b9456b86aed3eff139bfcef969667c3eddbd9a3ad0192459a90527ead5c3ec98626279eea0993689fb427019bbcea9a41698652d1461eee7b4d7118007c5e796a7d54b9f65a093dba1c4755adeea1a5645e398a35b8693b576585325a194b9f5c0ddf9c0b5c4ec8acee2aceaf7a8538ee398b1b531a7c8a2c6a84b6109631c02b7f1a9e0b9ea4ae3e6e6c716c6", - "585135023bef5d03e18f3d5efe53cfd17ad7b59daed3d7dcc6d41592d4eba2233960a43db6d7ae190123193df17b9f4917f47dabfda67fad94fc9197f2da2f4c98c3062f71960af32ab47429fc0691b88f45490ff5a9645abdf4bda9cd6a261a3cc1659a4f01d84477feee4a3fab8f1aa6b1d416b11da34944b22c73accc85a86527acd3c6f70d72e3f9585a68b7f1affe2c77cc9039b30d50d25a5f544cc149606356996a13c55bef9ffdf3f9dfff79feca7fbf7ff8db7ffce5dffef897fffcedcf7ffaed8f7fffcb1f7ffdebdffefeafbffdfa577efbdbdffffac77ffdf6e73ffddf33fcfffed29ffff44f3a254ad7c53928776d59c7e446ed807a893aae31353a57081216f2eca32cbd5b0dc6194bbe84d6924cee36412230c92d1f5d98a8935ccd86211bc943d6620d123b7a31d1ba0146d2accb4959aea699eecd105645c405f550476870b09b15f3d070d7b602c82279ed956ec518d6aad6efff2ac6170d5653146613d03a33fbb4696b23c36e756bab9843a761332c1add1cbca3569300a3676936108080d12e4ed9871cdca3edf0763a987259748fc85d7186dbae4e845775d4394b7769b4d3febc6cb48a1d64981a10996a321e711a384c592349a986c1649fd3b351a7925afb28963144dac43d6e754f2715ac73d906d16d6bc966f4695d319857d59b51d7aee2baa178b7d8547ead59b56113c85dd56021f6180c272a7db5330c34e92c8bd2b768230deb28999d4d4b57fcc8555d2f00a0a699b0b2679d569059c6ca664dcbb3878d3066e5ce201ff35e14e8cad73407fd964a6944ec30de0d28e5ad06274a3b870581a15f36bbe6336d54a182f8ead475aeed317402932711bf153e17d38348acb2263db4930cae3e9468366fa49dd539039d52304395e7c0266bf6be5c2bf518308e2ca5f70426e7068be7a90ea7eb2e007c769ea7a6cbf8398ba88703bd08f5db42cdd8529789c413a02bca31f7199a88845af70a22ce68c6eb3834e936bd3fbbb76577b306c4c52e2a5c90c53fdea3a789ac055f7c184e19af884177eb2c74aa78212c82f554e208de206dec4c3fe2b57abadd741ccdadce288075cde87af4ef44080cf7731a68fcc27a16d18bd46386403090c349bcabdac4a8e3d6a886a72c61550828cc65eacc74458bbc742aad62ba31c7e162dfe069a66aa50cf7594c83f54142f1c6f8b1ce3455fe6b7d107dd31f6c314d54b4ed48b6723fddecbdad8bebc0de2c0f47c06ce8ca1554506b0f56c5aceafb4e9e0d4d4774980fd7d0f9081ad43440704d35abb66748ecb4fab67aaf8e778c2616de84e9ae732086915acded9bc9fb5105045523b322f9eeed13000a675472e56e5aa6f9b5fbb2eb5223a9a42db5871dad6accd38b63d6127cd16926f8738533eae35a6df662ce969c6ba51780200a095762ee5e869a3bd811b735fd3ec70a589d9275ef74e8365342d730bc3e09816568b93e0e8446efb7bb97661dc6bca62a7d43c82f56ad178d6b8de175b1b7ea15086bc75445887c41f75814d7e6dc0a7603e6abfbf5cc6dac303a082fac54ac15ead8b52de9b91a9635cc9ecccfbeccda3878368b1d18b0e3ab241f870923c6793018229d75a676863e6e7d774ed1f2a31edad18549fad926f160e9042bf6140ae125d20ec7ea13281c8cd568e9041f9ae2024f54761825a74f173d82dd53dd12e06f0d98bfa2290913f86eb70ae7b2169869cb50f7ba8a610aca6aadfaf34be994954863820e252eb77140038e9d3e194dd5b667ec3add88337771e7575b46263c32f836711c3fe3f06182ee9e27e4d111aca77999c69caa31457efa06df33f3c4fb2fcf5025d16392e08926eb53404985acdae30246e65e5f435de7ad73ddb48768926c560a7cb090eadd8eda079fb16fe0d45673d61631137ddd085468b7fa386d7546f8c6", - "a768314e8c29cda731c45f4c9bc83a14f936bb797050fac7e790ec11745bcc56acc4686fb383b69aad1bed635050b50da376117c4837f86fda0e36ce9eebc5436818c6e23e5b865c9f62e0ebbf585e3ed71bc9747508c42e7a4aea9d4e2251dc50a44b513d7712a65002762ece320672b2350c889d65dcc044761b55338f8dbd5d57219a6ad9681c06263896960efbaec65028730ff8b0765743f4348703d931f372e250b6f021216a743455ab20ff9a451474c6b62037e9026b2f6c7596a503f88a11ae7970e610d0348d93cd3497534fadbe0fea1353171b543c53985d9b7c3e2d0edffa005e7651b230bd97eae8903d73e8038c75db8d117bdb0915d178f63087090db2db62959333aefe622144942f1fcd53fbacd12346dfdbe4054048a9fdd2d1d61e4e8fa61f7e84764b1cfbba6d984000c36acb6775ea3e39864fdcf7b3062dc66d3ae02ddd121aa346af7b1b2e87db87aab3f03db69eaf262aa30cb6ae9b20562b8bdf8d098f79da05b62325589a6674ad6c290ff6cb740472d8c5e063893b2ed4a64a6dbd1da7fc80fbcba8ece0938671c875da59a1de5b5c70604dd79ccf66e1915f6241025966d78651553488ccebad8656c61c239c73c62955d5a0ced459302d9d4f40e4c32c11a9a24f7583e491fdb781f40737e869424ed9d94c35bbaec4471135c904aa77e59066fa65466d761ead4400e5e1a813286dd58add90ced9fba271e4c796db04f4c6c6b5a6716a2ebb1479a26241e632eb0ab322cde5126e051c60d3a39838c8d54833103fabe586aa99d43063e9446c8cd1c6d23e864666b76a90ba3652813aa7c3dae906981c2b757c3231dfeaa8025da2eb2123162f967a437399701ac74ea2abfb939936fbce20dea30f668cbe96acf9b8140d20d566b6f02a753ee671a94d8cd68a25844e05d76edb0ee444138d2b05636c1a83b0763dfbef36ac07a06f7c86fa00b6eaeed8eba8eb9d5eda6fd5772877227692c5b773cb69ea542a14053eba585d7482c69c4ddf944e15f0922d2fe940302449406e516a2e91445b7f639f81a4ca4465cda930b9439ef9ecbf7a9eaba3a5e64f3462fe73db0c7e1d2e636d5682505311de7d92a1b09af1c44490fa5055bf65c382d008c74047d648e6f53254069013157fa033541b078081b208f976a851b0610f5fe92948556600ac766b0f388d571ab63aa9e8d42bca6a1eea455d5f6eef7ca68ac6c702b566cc910da5a7a88abb4feba287627bcaba1603c3b7c60b37d5c6de32c4ffdf9aa4eb888497ee08371c6dfa6f2cac815654c6344189106cab9f28d8b35c00c5a926369d7cbe09b34fcfb67ce5718e3d9a03ead8fa42e5521c7cf39bb1d67374f7435b5b737663cb0e86a0cd0c6d87e1dd9c6716e02e6d845457b587bed3726d29c559d9e22cfbeaa6810661606a38680e963d3db8a24d5a9f5bef6bba3dffec8f56e23481162e1ff0b6d4cf80f4c5ee97fafab22cc87deae0967ba5cfd1c71673b10d3dd2dc604bb7fc087fde3d6c3aa7bbc0572fdd44efba8e79570704d5103af3d8fe53adf1a2783e767be0803ee1ee34b529202dc004784ca458e9d9c92c5872eef672b2c11930feb43eca060596b098668cd83094e0842d5fbb2018b24d5d03ec24fe1a7b05fff2f5bc99e5787e4e177e510d9bf702af0144467779db4fbe54bd7da6f69cc5b6192a10c7ba2e2ee461ba730f662717b56c16936153b2963db751ec3bb9707d5d3ab17c25638d8caece568aae57d31793c45935fe0cde2afdfd47d9751b2805a6b985ee8090e1134983aae034d463c275813e53a24c17c341dbae6f06c68fa7088b857eda90e62d2bcd11abc8eb1231cae784e339688069dc86341943877459110b8c1c31c6fcec1d7d540c087b26d0e3e55071a48eb9879b8677ae51b47a873ce07481f8736d7dcc24", - "d3d6e61a380ebacfdb194ae992afaffc2bd1ce691fcbc2df6d70b2417ad40e3fbab8fc8a2dce5c5b5d4994d7d89415b45bf5a6ac15d6694547c5ac767edd3bb3dabd8e4eab6663393b6d9e9b16eb78b5778e4dba9a7b64f5bd9511dd2977189adbc9e900f60a57de5a1400db98245f77ab6bdaef9541bacf7ddbd1cd3d44a9a39e3c74237d6695b3c505f096c53b3927afdcf6fac8db0413342af008fb0cf2043a8d4b79f1bcf997fb08579b2e58238e1e515763f3b57cfaae5f1274166387d977f30fcedb1c327ca7254653cd258295a1db130e51abeb9340a6628753fb119b8b7a88808da7d2ed616578088eca304591b68d20a3de97de2c17e70e8fe77a1beaf7edd8a8eda81864bb9792c3e902d4e790f88cfec76353f8a3860d0668435c0c75c13e914dba321549834655d8d672cc1a071da2f652361e1df5ddcf7e7ef87aedb56d386cbfefba66993f19a2073621055e9fd22dcb4fdf1d9a5ccee6b0de3cbde33f91fdf5e9cf7f4eea83e2b1f18d1cfdfbf562f4e5ac0773bf0f7c19049e3205f51ce0e5b425ea925c382485a98202b1e5b2c26b17929e0e2f4818f3f3b4f6420ac69a3a8bef74fca695af7b29f4313ec6251cc9d3348711a42fe795c68c5db55eb6eba86a05e4bb09ab62a5f978e8c5b7973d420b7d391958a9e36072da7c797a4a842c5581e9d00d507b45f1a881debbde66185819faef2644847541b2e73024bb6b0dcf83432c5a3df32de106b51f1d4fb01fa8131dc791dac550dcda5cba4ff4d30469af0e261edb2deb68c3fcba4c63c6bab45fb5690953486e51cd1bdc77fd9451deae5ebecd6fdd61750fa8b64abaaa1936cc42fd287af9bd9bc3b21dfeaffce15366ae8fd1041f6af399fd19587971ffadd9880f82f2d4d5ab9f8da19b3acf356bdb53c8554d0feea0f00c3f36a9a7d33a286a45b631f3a8f7f36ab6bd5a353b6854db3f7a05f05eacd704b3cfd46ab911a399e878b1063c6f78f46577e5bab957cae52747d95639878a762a6d1d78f7e99f7d51156c822a1bd6c9136f7164d4b5699b6e52886ab778087f0a0dc67c883ef423f72082a281a1207844b759d1aadba06b548bcd619ad7cd3b56284faa755950e1e0861c4ca47ef2979dd0c22c9ca6d43e8a7da6192beb41a9a976882cdd2d24ca028cb86ece22dab57c05aebbd8cc09c4ea3644eb31d0db5644f8d4fcdc1d98988ea7c008f99b4a3bd94c036b94ddaa1bf007528bed438b1e00ed58bd89ad9c9d8a2ba893bcb55e9de76490f8232b2eb3fb4bbb0915c156f43371b1a55de86155e81a4a41a84d7e3bf662718b5c8d219dc6cb62551f3d2a8fb876faec68c56a6ec03d93dbb07b7ece2ac714e4945ec3cc1ebd41969b3f98b2959e54223b35bb8637b95c83aa30db6bd4a13714fada2dbbb2dd94c0dd3053fbf3fa98a9f71be8b3562a02a0652aa60b7cdd5ca6c33295f5559c2c8c292550f39737cde2e3f20590549a1dd97bc53a6a871c5ed21014f6883156aad99ad3362faf9ee4079def4e5e89f5395c7c458c99c5d9537d15656bc0ccad697bd10271a5e5ee3ddb32d34f1ff8003c821584102c038647c6c040b100e45a79ce04606f6e4592d8997a86c56eab4cac05efa8a84ec0f844838bb76378cb4a17bdcdc536f8508dda302dabd6b9cb2da94c3ff577fa9435d2729b32df5d98c0368c19e20eb827f97ac1e22016e05035d9aaa1feda9982acd01c9aa73896a46a807df565bde3b56903c2c8593ea758bfc0984631a07d655bd6955126c35bf503efb03c5c5bcd8e60d0f02c65099e588ffc2c3dc52ec5647cb63e860d11c1063b341c5b45575259621b0052b94a3100fcb9cf99e28129c8ecc490b7b4be3e5b2dbeb55d4da3cc157af1ac764fbba0dc755a26c1d5287f6e767937620c3cf6bc65c9e11422133d7e61ad5b9bbafe", - "651e4e871ea4335a31a0f0a6c7cde41832a85367a7f4cbf7348e1ba095a687af584db9623d3052f865e0a2d4f60145531b553af603db01927e03955112549aa9541c95dbf072f46e799b325005bab195c6b00c6b41a9d65d6194c5b556c766dc259619c698daa8f9174e4e0ee3bae5fa345e7e3563e4eb4f4d70e042996b7baa419e8b27edd2aca8049dc018a0a7bf2835c97f255e54ce0c55b3a78b960ea53c5385a0e396a0db4df15e609bd30a8550750086dac3de194fa9bd143c7031a276b11038d468e3d58fa0ba4645d25654ba6d2b116f3400bd275e5a3d6fb5a48941a587b93e99a0cfea9ce943cf99c310f891e99665ca2add205cf63c8406b13691205488cbe448b56ce6b847fa781214c3b21f95e94b2ae6498c17cf0596338a1976a9f469db18e1c994a31a5c6d5c82e110dd59ca55fb48a400ad9b6df01874803191bf4d5e6dd34f5ad0dd8af9271aa3f7d4184ce026d74694939dde5693488592d194a313e393c340dff33331ffd2fff6d0cde51a0be03471c2c7fa66dd1823b5b671e91d44b1f5960a10ae66bdadd41d343dc45ab2fd19c963a4726994f6c76e9089eca10d838e5efeeac88e457b7b91f2c52971259ab4d1b7b71393e3839aa7cfc69e2784a002770903e21ceff1322b595081a3be820e4ab469ea081caae15f1ca8e367c2af47d459fba7e0f9fb353dfbdc7ebbfb69ef0ec3d715febf000000ffff", - "8c9ddd8a1c471684eff51462ee1bf2fce58fdec5182d1accb2926556635858fcee26aaaa613b227b475706213196babaf2649c882f78d502c29fb458d8c2c24ae2a4097f9036a577f42c4a287889d31985e4193a37a14b4e1813be4645c90b1d073c3b85ad86153bc120e40a6b171002705578469bcb2451ea90a7c4e4857aa7e5428542a3c9d0db7e623ce689c6e62af16c43f777d3a464c01d44a73a9c3c22735f6920e1a2641f5d5c863e1fb794e74b1d1b98995205bb3984db61b2d254189035c6e5a2d0fa67a4b6a599b408c7e108e2962e0d9baa77f142f1ace02257e8d86372b0d430adc83613b726e3b3cab154d60f175daec0f930cc006575fcdd87ce27ea32283812dcf189b825e3b0d216247219e30f2211bfbfb110e8d6159e65b1c46805418fbf4fb9e614392afb0af144a94bfb1c0e060c485ca36ca91765dc53d1eec6ee1420b5c89d32a7d656c331fc580e7ae7c60f0f9e7a0e42055f1970a377b18000b2236b2c8e649c86dfed3a7774d44ab0550f83107f3d3d43feff315bc7e43072d49c7ca8cf98a8a0a77fe86a8d71e298c393737ad88ec4d4c55a4d86e520e133594e959be1f94041d3e28f591734c777fda8b917d91315cd42336c40e1b58d2fb394bb5b7db9647f545439550a2bd689b117692e572e2896b249efcb6d2dae0b6a23242b885e9ee2f6b48ed9b28b5617d6a5a84f2291fbedfce5a3c1532511f380af94f405f1ab5cd726543448f8021d3c2e0b13a1115c9ae750a40c20118d736d86efb0945f4cabd552ddedfcaf78ad7d3342207820a535f66d01583804f7895cd3a6d0ea495604d5095028d9281e5e4bee13b0887258a33072f10cd1e1acdcf49f75bd7e014ab1826b6fd059c84eab40bb9ed4fba595b19dde56677571f7ce69030fa2b197ae4f53cff0c0369dfeeed9b1d95023353a7285acca5bb34b5c6ee3b1f1efde1ac5164e54e88430b5b326336b1d1c5b4faebb3fc0aacc4b445c5904484cab70498822d6cddb06ea913a4f140032321c235dd715160e8f5a88160cff0c872fcc57ad2954859d680ed797876810e8f111b5734ba782ac5ae26880ac32c4928f16f7546da57b0bd9dea2ec4d2e28be1e610b975a090d7253b5461da3e7c7508125b688ef74a6ee4d30e7160a775f6e7b9b3306af8a5132d937dcad2a45a3a0dabc49f33c382ebc4067e8d6edbacc581adbe1ba0f78be64d91447c90f0b2e5e8bad01c66b5b2bfc7451467bce8d5b130d14c5c656f44d0c5ea141dae3d6a68430af37c4043599fbde71c04c867ce2929d0a14e02ceab98b45ddb52c79e08e93d4617414d5316fbda39551acc69860d6bb5694ebda58fd510bbdd624a88ce06414f00b1cb94366cf8566365cff6291904438bfd1b0099640ada12b0df464d60d47f1918e168e624a193805bda558954cc44c1c46299f8cecf42f560232d5326ce188e3fed7ee9daf1a68744be3f87ca1f68037213650a562127f470d63b1987af478c4e0bd09fa7422b92f1a4de82eb9187cd8ae371bf89bb99b91f1e1e77ab94a838058222ff14d2ec401989a89fb69359736041075a4ec289baccd5121dd3b0d39b883a4a019991577db6d13ce6013e29122b3a4adb1a4de65b7ba835f3ad409d4a344b6b65955c289422788e8d6bbcd0f5270507ae8ce3373074500dd86611dfbb5382f764fcad42806fc681ef90aaa4c8960b5d99025300e299bac23005f6c4b524563c2214bbb2cccbd0f3f5d8100571f5f0179f4de2af0bc6924d6311239c541dca58f69f5ae92e29a9dcf067922aeb6f792e6aa09b95e541cd83d7944463fc9e06a3721679ed33400e09cf0465bd928010d604697b7aff7e572b02ed1fa217f8f0a01e6565348e58436c6a553863fcf242b0f44f25923cd047a58b215170e4da6e1cd5fd602c792b4", - "43a15e57567fcfd2ffe04f5bb7feee21b0251fdef1d9c1108d62071a2a2ca20b045d72e717350b85ad523c88b1c7f4109b53fa42f7109d484cc392fa1ddec46debeb087589b56ef439994b3a633cbe6faf3e1b313e4946e75c3303e1ea0270d9b91eb1a31f9bc31dbc97c55277ce1573e87ea4167f8a0efcb4d872b5d9e1eed3b29df513ae959075548881c0dbf0083ef33d86850e7353dd547b0708c2efba25dcbdf40ef6d752be3cec99c1a56c3b43fa961d007fa6249ad03ddec5a104a57cb2697cbfa8c5cb3c53c739789d19df2690e77b531abae94cfb6b06f68f7259a847f3d46da779dcb6fd35e7e0d5a1d4713b9fadc5e509b99a76bd83838a90ecfb07b7b25b2e3f5b6d4edeb055586fd063e058c2946cfab0256397bd98cbaf5477f2da6a7703b54a34930bdaa0569b1b82383cfe12e589432133ad3697d4d01364fa263071be26d1a12cb2c72e3abb0714828c93d2bfb3f322c09c395d4ce73bd68d21ca57bc83c6fd014a17ab671d39ab7a87a1763ec787b42af96738d5442299f06ead775ed5cf522430b8ba30e8a2814ce69aeb38b203fcea03b380a514645896ad9fe0a73ab2290267c76b7a2d918e5056c1fd0b5a1774de0c7cacc1520824e150242ee1289fb233f3b8342f8d33a0958d973963baca3980f2345fba724778889e98cc80282cd2365c39320bef80b7680458dc2fb385ea5847c10d6b11f9e8673e878df5e869bb6623e3894f74e1fd52fcd411ca376431430f502ade4e293179d4f749bb4fe5a8520efd56fff463a5dd344cd5c7d05d758e36f882b232a71c6ab02257355513205676d929b53e6cc9520c4da5210eb5c406935bb2bce78a2e6d2256bda614f858dff44eee50ce874d776e9aea81f580d04eef4446785e94aaa9ad15473dc5985ad639bc0dcb4d659042377168974fd9ef01eec0631e920afa5e3b57c16ccb3bdbf0c800b8a5c9b49589ac80eced76c83a3f125ca2b4ef6acc6655efc9a14e4fddcce024031c9e37b2ecbfbb8228e87892438f6ed8a7451d686e9e7dba2fb9b8eebb79e00b469259b8c80b36016e62c0a1c57adeee1a83d30dd1233e1f779458e384c0152ceef86865b08e610a2eeda5a703ec6fe0d7882702e509f1ff79531757a04c86da437673367263c1d5a46202816f2d58928eb88bee918fcb82a7d927cb35b3c90281c35f27d90a640f1e1c36390bdccd966ced24a0799644cc66728d1234c4691c3b54659e709a069e7d6147cc03a9ad196c6c8d44ebdf3b69b053bab6c758f9099df11e4da4130b1999801892051ada762bd8430e6b994bbf231c3dbcd09131ecf67c6c16c4f0eda92fca105214f1fc6e94e83f65f2837cdfa5356b879c89f4290b43dd013de7881cf8e21c93892d2c9e1fcf3a8cf06ca63e73394becaadcf1707c89574e8119d8c2d2923391debb7ac461aa72f920a517ef5e8107f7b8d8882d07f7ad62653bb83ec6b143e2cf00ac8b507265a25f97a1f509dc15271cd011927a21c8475df5eab3065e8e15587190b5b56228a068ccfec825bf16dcf608f2799e3f8237a7b13d516994e7a57078c999b155300fe68a3f9ad32e3dc76446c48bb0375d6cecae65e96306f70e6f51307930922486860a2909891f8d9b3c65c0bba0cf9b0db48d972c5e3706f57b9325c780e12fe717bc672bb55259f8524168d65cc9735df6d5adb1a1b217283bdc240fa56c7012d91c4b6a8e270bddf90959e5a41e847bca406e5111a3cb3d726b09849d9d79e2f7d00b7f6a802d8aff53ba0c2fccdcdc3ca4d2717bfa53c0b4d1e1700c04f58822893b7288ccd18efaa5fa99bb64cff5d85e752dc69b7e7564e4bb3d9d851d114c31842189523c2e6c8243686869329a1934acc5277e4f93d4db40c3bd3cb66b1c6a32630d6bca60029c442c156847f51ae238a02bf605e39a", - "a8247adf05aac4d5e7874a3b183fc674ccedfef7d816e590ef82c4814e47d72a611aa1737dca6a0fafe5941f958fb56477d05e99003751dbee92537bd29c38c3b4a908fce590a4262cda26c4c56db71afe198f7e037efba097879ee33e4d91c4dbc26f50c6c60a2917478da0a09a7294dea17b80994e8f728f230547afcfc00aa22b520d09c4c971bf8d074e2789ebddd7ad8b04e547d123df6bf1c5354e566e5ef7b76d0cf5a9f7554b0e0edede14400dc2c97853fe842e84e3dd9d8f1b5d465e40d835649aeb702848c31fba0838263471a711db2c36c74dc81568a2d562d0ed5b52ba23ee50801af2f2021adcc56b7f78c0053a59a89a60daee9cbe292cf50e9002cf1d55f6a8115fb20bb883a6af84722151453ad6057b40cef56bbf1cfffdebc3c78fbfe0b7bd7cfbfee5f5ebcba78f2f6fafff79bbbd7efbc7eb972ffffcfdb75bdc7e7cfbfcf5ebcbf19bfefcf1f9b7d7974f1fff7bfce1973ffefdfddb1f6fbfbe7dffd7ebef3f5e3e7dbc1eb197b7ef6f9fbffecf2f7fc00ffaebc3df000000ffff", - "03000bd36c77e4060200" - ], - "rawHeaders": [ - "Date", - "Tue, 17 Dec 2024 23:33:59 GMT", - "Content-Type", - "application/json", - "Transfer-Encoding", - "chunked", - "Connection", - "keep-alive", - "access-control-allow-origin", - "*", - "access-control-expose-headers", - "X-Request-ID", - "openai-model", - "text-embedding-3-small", - "openai-organization", - "user-t27sfkqnaatdbowu2i7ij4dc", - "openai-processing-ms", - "280", - "openai-version", - "2020-10-01", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", - "x-ratelimit-limit-requests", - "3000", - "x-ratelimit-remaining-requests", - "2999", - "x-ratelimit-reset-requests", - "20ms", - "x-request-id", - "req_db57591e8aa295ab7ddba9fa7dd642bd", - "CF-Cache-Status", - "DYNAMIC", - "X-Content-Type-Options", - "nosniff", - "Server", - "cloudflare", - "CF-RAY", - "8f3ab8a0cec7fd83-SIN", - "Content-Encoding", - "gzip", - "alt-svc", - "h3=\":443\"; ma=86400" + "1f8b0800000000000003000000ffff8c5acb8e65490ddcf315a55e03b2c3eff91556c08cd0201e0b6681c4cf23dfdbcc70c2259a96aa17a7b2f29cccb423c2e1fcd7af3e3ebefcfd0f7ffee18f3f7df9eee3cb5f7efcc74f5f7ebdcfbefffd4fbffff2ddc7ef7ef5f1f1f1f1afd7ff8f913ffcf50f3f7cfffd8f7ffbd36bf8eb973ffeedfb1ffef9e5bb0ff9f9c92f83fe33d3fefb8dfc564424d403a2bf7e3eaf36d4cc2f4f5f83a75ba2faf114e666cf81705806fa39a77545843a3d9dc078e56302edf12a7a28d26252d9fe1c6b35a1fd1c9b364d4bb242fa683de734cd28a43d9f4e6985d3978a77998a3bad35adda8dc6ce7876e6f3292cd3001e1b2877ede797d974992768afdb02bc85e8199f7a0e351df1780e549f2a5a2b5473cc9e67aa31b0e8e40d9072898ee704d191aac36333bb93be54b53c529f1394a4a9d1a7a2444b928ebaa2b4794e1bb852ac69ab80de83d48ea25db6b0763e118bfdcc382fca96004745023651cf77696a6084820da2a211cfa159f0e64549bc42fdb9fcaa50150ad5b62a8ed4f47d3ba58496a383f644a76aa4f4f130c443e6bf43efb5fcdaf4a7e8a9d24d96e748f7ec8139c5b394347d7c89cbe8d0f603a1994247fa69a06234387bb53bb5fa84fee8503ac524acb3684b12eaaa1cb9ae31792021c58d2690b2567bbec92d4ac109a5511903c63e3375ca668d0040e704b8fb78d1eec7e6283d1445667a9f2c0d370fa3a030a98e78ee6a40da9b632a27a79366f51c8432fc23435488516611719e6ff2b1d4e4f3432e20d251c1bc82be494c5204fc7a1768f9c5f4a9e5afe7d37049d4102419b2da19d3b5aba29ac63a4c45f4bccd24273d4f66a10e0547f8a4d0d08e999864b88ab24c628a90886460330955c6c54a462af5f64e0b5ed586809c0cb40629055843fa9c40188a53c8d213e0b82cd7d2d0e22070b3201041d5a225e50b3231123788348a3ed52af959205c9df624543219feada695105daca4a3620ecf6721408b0a7474337da46a04b19f97d914ad490c51329cef8e7a9eca1b044bc20844c460a5e0039032cd3ac8a6c63b80a8881a3d47a560bc47f7783abd2b245b70112b52ed0c16ac30e1d494e9c91210b8cc94d072755aaa08f0365691fc056a1a02650da7ddf1105bafb159e127e0731afecc4b0b74891c76b2461f69e1350e5216119d5d9484222f7eedc7c6bc584b6ad493b74b355fd0474a56a420cc052d2baf39952751fe1ceadae0e0deefea042b849d32994cb04abcc2982365000eafab8e7ff3ae3b001d3edcc83a1cad6ae38f8d794349650ef14975630e928a629399fe1e62d6c471ed036574371157c449e61cc7838fde8a20f720383c050a282b64372d8ad9484319eb59f328b1a2131b6f3c22f915f3533a4cf3325a184abad05280793a20397cb2c874f7c391cb3b7ed83bdb46ed1c427434d3612bc69990b52546430f79fbc53eb36cad5052ba1230c26941b6d5304b6f413ca0f492308733516ab4b3520fc14bfe9f42395a1d9cb32110228a5d56cad17a9e2a4ef5836b8d8b256b758726e7b28d49b1b06dd4c1ad8a4993a120da94e7f20368234db87c5c87e55c239d61444d6219ed1bcae7156be8e414d4f63a1263d45cb91675dd63668937aa4366848c14a29c5fee763e7d7503d55d3922c9b1a01b4947c8403b4837ab464bb1c48fdc4a90a9c9149a61a7eafcac2042d894d7d16d6d3ec60221aca7e6ccfb0620aa283e297127add0f2ad8ae86be11dc863a6747722289cd35dede493bb39ef8bb4dba9c61140783f4f6b554b8b32d4f5460b4790ceac4bd02c7c503dc5a0e68e62168ed94fa049575107a31756e4669ee279c5541ca4f382b0eeb155ce6089c541fcde6bd9e8a094ae349cc8c2968a427c2b61ad7318a02a55ede8f4c56fae7c66ba1547328c0c7f576ca19a3c81744909ab0b4978781cfbae033ac3190fdb228289253d6b5825ca744c1f5b4e7b8531a9578157b2df82711b707c4658a04835c86a4ab08fb1627d86fdce34f87127fc650f1ca59da6e14d6eaba41dfddea3a3fcfe156d55c2124b22584ca9c9800b23e92c45cc4905d10eae22a13e7d6a20588e10e31ac21ecef49b2f3b15e08891f69c923cee40591ccf40148ac53f529fa90ee50211d1aec5164b2f6f9399064ccf313ec4ca33d90f5a33288d2b7c77dff77da3167fd9492da5cdda2d26d2290cac7b5d5b4e67cda900150b1688367aa8351a8f32e815b195c23ef8e70d06e0e55bd09cbacedfc94498311cbaaaa4e4735185598ca24a7cccd30ef256e4d4dc4a3a8b85a74beb1cd7fad6e26f3f6b0d2246cec8861da21293218b74a17cf2c04b257c8a2c06c99e3aba4256a1de631d33d5e20a4aca8db320b2c0aa421c90494ec4de8f2247d4b7c9c24022d10909ea5bb88a194391162203cf55f5b495b217525852a6adeef01ef601d4c7fb18c2baeeab9f63c98cad34e85cd45ba558bb97352796e6ac3d41f828b6bdb05b4246f92e84a6352b655676d1146505b1dd8828f6cecca7346f4d513dc11927ed6c3359baf830fdea966a6accb39eb093311d31248b5cbab2d84e957047e39410efb244ffb7b07a45b674c6385b2c993a57aeedd656860ff3f46412a3985807b857fa69fbcc0bbe9b7bb65bdd8faf885c19c8f4291969ec24bc3ef774000d3954ade58cdbb11c32c26fffb25f4e156dac995b7103acab63c04e4cd5e409e355b72373006ecd55de8112ac9fc24e882ca1706b6156823019548711e8ac563cd25862152757f6566ec91a722bb41c12b19f02a1e42a126a76af67c62d5dc9edd771077b624d003b99bdc5855f67032dc226c6f6458fdf80f526c0bd39c971bf1cbf0d1fb606346a9c8f1bdbc26c66ce25a294e30f4db9d06e99a47ab0f1e756a573b4eaaa0cf1d32fd9f6468992091caad6bcdc587f424fdf6ea539518f65cab3b5fdd649d6c6058e86f880bb5e6b909dca39dc6d7fd834429d8cb1255fbe9c611e33e25ca2a544303eaec739a772df4e729f825865a2ecb8c2bd0dae3a0db24fdab117f55e5bb8fe2be571365aeae200607654a9953d7be96f20f451aee596226e7d76b4f67bb1894aee12af856284fa8619ab13dd3ae839d91526737d822d8709b4adb6c3372c947a78a588403ae9578b299f3a573956a5b91273af9d66c7d3d90eede958604d02627e3603df05505b26bb52e6367de4abcebefd30ac6bc7b16f30d2ab1f39ae52e1642a495b9a72013466abac59566fe3a9ed5b4ef9dbd40a879d8ef24bed1b9bbf5eb1ce489d6b56e26a7cf9252cb69dc471545129c6fe9ec11875a41a4bfe1cf21b332cee677bbd545e7a62dc599298b40d6d82dbcb58e553b0855d6234d49ac22c52a0a3fd4de6799d416f241d881facba6680b798562aa42c5e8cc0811cf632c77803ac945d1291f414eeb119b60d71307eb0163863e1f40a617cab97f4f6b6562c08ef02e7cdab6e4535f7205255ddb93e81b6e3a161df978d72bf81991a8da68dd14d2f9cdb6e916ba5de2eb8fad982900e80f10815faec6a7ebd489442126a154172cb20a3f2784288080658eb696fbbf1d215670b4db7c29dfcc6cdae77dd07df0b36ff4fd3496696fa1811ad6385e4ff6352bf4a6f6634b32d27cf2e7419d8530ad8d29f9dbd89d4a378c3829a56ee6d38a51cc661cca8b0348fa8e3be547e72bb63a32b4f72cceb37949fd1aaec1e654fe3f40ec293af516a756d85c8d58d5ac789cc4f6bf7cad8443edea0a93b50ecaaa8a6730719dbd133064933f1d34ffc2ad04fcee8d20179f27b97c0ad19e6be364648b0a8ea5873307b19d29de3be72c05e8185d65ec2e2b23ecbe6dc35dc7eadf2959008e71b457b5331e9f5127ba39624bbf8eb8e088bf60da292d3b00a73263ae9c513f0bd113f55bad60a1992565f9b8572ae0aaeb5797ab2b3eaf65cb359174f0e27eddd6bf0b4af3e185d3582f79628b4a71ea17d6c11efed38910fa8ee153f37a0ff0d0000ffff8c9d5b72f4ca0d8357945493ece665ff1b4b41d2496a004dc6af4ece6f5b23b548e003fcbf2dcfc7950dd82bc26dc93bd8f344b528646ddd2666c71bdab4e26c9b232e6544e60eb597317db3cc790c1c187feac04ca2e5abd30e248139b85d0c11c9f6725d864a5ffcbab3aced2299c0ccba56487a8d63e8a25f601af7287b029e6786ef7b355f1fe9eff46a9167027ca1c8b70d6c51043d1b48fbfc9837165697ad1d3c1bedf7aac13f57a13d83df6e5f505b5f9080e51cae12671e9c25b65379efe21f16d6c3cfb450c57506d1001a52c66b088279e4bbcdee4c582f919141b4c9ca6abd4298a7eaaa4d1cc0d9383fe9a1c61d1e2c9e6dc7f8caf781afaccdd6a1926fd76fdab1586f37c02e2a050cb88ca5477dac393c50967bd856dde59c4fb0fb0648c15cb150696b1f175edac787c721dc9d55dd7f3925acc0c0b7def5b07ce9cc3fb8e74bc6f26dd0e82581d1c89cf0c7688b2d6f2c974286da8617d6221e0990f7789d75d4ab05c67f8485d8e1c7f4cbdec32752d86a119c1d4e420b66171804988628f0dd47f60d3f47f6db8551919502950b9ff56cc28b49c5807926238e457a392b1078ea63b998f9b02e1424e5dcce6d194738bfb2e04fe74ef19cf324630eaf74aab999312405f74f7ce14bb6dfc324e9db2ae858db16afee5772a761793157b3fce544ecf464d916bb7f52446981d32afe65f106127d764d6cf9469925ba52d8c975e8e6c45d7c86419ba914653462d7b0908c1d622f3e61a008b9b1c933094a59a6dc8b4ae4afbe2efe1ba301a3b50b51a8e2e115b3c1e6e7f09568591bceaea0e3ef8ba061936936e58ef912ff6d9ddda79df7b3a84c21ab5e03657d60a790903e9687666a8ceec6cebeaf3c11f29a9ac86248fde5a9f21d798e8bb1bfce8e9491c2d30e5b54599e12a65b13d7fcf0e38a5c27c835017146d14139cafba1dd87cc28a854bd18575ebee1c7c972dc30cfe4ab6fc6f04a7c0462c6cc1c26c876776d917ba10735eda5c722468dc7ded9ce3909cf5aab44cdaa10cbc5112718e38b3583a157663a3059bc91bc5baa8008557b0b1c81277ef148fffa6aaa01baa9f1fe65f9dfb9badc45c30714a232cef4c5a418e027b2e560c666ef30037807465e8ade9027c26ab35289589ea81e6fb09cc7352ecb81579fb2c07d51b6319e739de29f41dd27fed4f3a9ef5f3f2a8c725ee672ca19b059ed55acea5af72c162b16821f4e7407e0920e1b4e0a0d5c59f50ebb9018f51f7ccc83cd76348f64ee03998a7504c45af891c7731c6b738c081b1ec07f9a4a5f1cc10d46ab382b63be2030c94962b164d6dc5e532124a520c5d74538be670b65e3170e44b71ce69cc3ff7d96b5c2c7d10bf08b49bc68ba6817c3046edefe0378bc9f4ea885cea9966a1cbd02172082c288fad6ad719dbce2e03c906d5bf2d074b5825e9589a888c83e9d21fe29d204fd0b89ba5e88b87a22312d7897483992ee06ed8847f03571f8aa5a252c1a75aecc982235301fc24c945b6e31e71d37ac4607c6666f56d42e8b2c465d39f2b69f7fa1cb25bab83c77cd99dfd1416cae9040242c8061e7fc98f6ef8706b9353a902d0c21af2d685fb709158dddd9ed0fe0ad689a4f4ee34c08a8e448c09ee07f20cfd0ba03e875cc25245a191a7e5df1f91cdce7b401c6f05fb3e223baaf91f06019166f3e3604cabed1656c2c12909073f6f9b8fa885b9a7b8e921babbc3ed5d267e09a3ebccf5af4d62f0a2371fb2155ac7e46e734af3cafd86de07890b0ac9d74967030584d8a227006d12091e7d6460748bbfcdfef3182df6c8879241b0f0ebda6f20f02bb4a59f7e2546d4db23932bcceaeb127ae0e27c9d78ea12fe6c64fc443d09e35ac538092cd91c74b72504fbe3c9209765caa4f48f4ba0b63fb91d70cb259ac29db200d673260c7358ff3af1a59fb2f0bd6dbf1a461d77b62331b7ecd220270a6d8b20131c0f8935b981af1480ee1e523b418a64e3de0ea336f704fb7669c495dc80a8cece81d26208017c0554aeebcc39900598f707481c0c5af43f3a952a8c3220f6eaad2f42b6086b1f597ad5b45f6676fb76dbc9082f8dcf20287c567c37024cc129157a132a4885f65b158e67a8bc96da4e9f8cc6eec1ccaccce691bce4381c8da41ae21320de748defa55a2de5d67a82403fb619ae8e6808ad4b7c3e240b745e441288ca5abbda358363976a64e291ad0931c60407ab94c63ecca9c42a6aa190de7d436d6033cf175366ee1118857040b7b315cb1a2a0cb9a9c182afe197e284e2b6287c14dc4b9447ce01a8d4910b2a25506840a79c7a1f807ed036a57556d26f6fde43501f0aba872b38abb179efaca3fa890960de09cf5fc7d165b1a0140840f53448c368f85ab27cfe2a7e6722d4fca1163284659bcc1ab5ffea8fc13dba4e8c0107d91bd03db17dfb636729cee28db3a2a19ecccd9fcbd0c0229951d1dc0dacd50fa54685b0684b868be975ec982802e31ccf1bfc905b8c57b391b696e97bd25c36964f54809c646d7031b563ddeaefcef3613c0028b479710167356729e06490ee6cd0bed3ce43906f4b9c58d0e3525b15b5f1bd90231fc31c0f1a492ab4c3b7bf0f6e7d86b5dc5143202cb45f916665574f69e34b6252d6d069892251443119354be2967f4c43b76cbf2bd0daf0f7a4d221739f2925a2de83308d9c53d30925c7b9e21c8a6c1192d2c882c78d9be47483e8ef79c1293c311e210a76d6f24d884acdfa8d520b470e0c5f33bcd7b8e694619b662297e3031b6197e8ada1061f8bec6ff127f18400222bd40d92fceff3d5a679ebfac0666904a044b973a8687cfeccd6395fb8433000dccebb304e5e6bfafa58175d753309b04e2f3908abe53f589673e730156d7e2869dc4c4ce0f175e7d225b966546f08f6020d09adf7348c679089d874aa4d823cfc80064e36c5e55327a1abef770f016373d86a360256f97bc91727c5a4a44c04f8579fd410a7ccdfe6a01d4bfbe8e92a780241885876a445eb4ddb143fa376c9cc7a8d7135239fcdb344727183d310664e970cd23c8591e6eed3303795fbb33beb540006f03d3403b52c0ec60d56a0096bcdf9bfe4e57d70972c3726c39e6567605dad00cca15225a85f1de937965796731fd0c793143f39d95cefd93afa18fee2d8cafb41dde57eb9a1b4ac694916e12d964bed577c615df1342989d9a7b2a06e5d2b233ba45aab01960479451f6b358d99c720984414c90769027502f6a4026be1f9dae76299e34ace75e0a4e37fa37e5fba3812f5838586816625b0c24095672de66a74eb3203220f2e767b9c6cde819000b1e3350f56aac1ee52020c2e705b08313da34d67194aa3c312d83d2da36a23240be6b19e1a160cafdda862223fe5e6797eef4fae6fa6e99beb4cbdd9f246ac5a428ab8d6902bbf2d8212d2d1c7fba8f187c0e2e6dbe5ffc872e37e983dd06cd52548cf26e3bf238bfd57d69e4ee1ac3da7273467607d233aa648195d044ee80d052ea8a9b08be554d015a3bc34f8477ae1aa1e41a5c35fdab36fbad7ed7f1fd05f76c08f0e45a6db0a9256e491e9ceac420f43927f78fadfa26d490a73431d013949d2475e18389ca5b6396d2613ad3210fc43f1da04c7cfb55182cb1141c0d3c7425467d631a09e913134514d78b5b2cdf1bc722b6c5129b6e1ff4caa440a31b0c36dd09e36d297c68f6e6c0f855d0736c33b8e3e652dafbba4201540c19b2bb36eff5de180e64d7acc6fd2df24ee164e581dc4166b2cfd976157c73beed94f4ed780023883fac19d8ec0abe61f35b374e8ef461310c05a3c55a54af8327d1a58c98d5c3dbc139180feaffd7dd3ceddeb19317aa280859fc5315f2dafcd586012027016ce9e69e44e9137ccaa07bc9eee5764d1d1cbcc81e9ac3d6c1dd2b09eee5a893d69a8cce99112c00e56702dc5e855ecdf5ea9c0d7b62c999d1d2593a3e1e222e148a9f38be531b001507b601ee087894eefb88b4641032880f89f4b4942b1369c1b7a697f748cfe1f1b623f09416123c4451d4d8fcf087d6bf6d6d74039570f2038187f9140000dc53e86bd74b8eebb4f3e4f6cd8ab3dc225bbddc49b7d7bd377b2b8314b2b85e521a70dd706725e78f644ffc9a0bc3333c9b2bd559747a24c7b35b04be557316771a3fc7a3d403507ceaba83e68a70f04a81e923d54ec685113114338ca14084ef22342b8b1d661527f9e45076fd9ee56a6cb9cc3ba81de4c716777c08c71c1947b41836dbefdb18e7068738f40f0bbc8e60501e476a7ea1b7ccc8773fc73efb5b9e1017da49a50ee1ecbda41ef375b0b119ec0a479a133e6dfa278e3ff20707ec32f5241c02beb66cb17a5d890f9de7e637017de5749c7ea92cf1fe2c85783ef17429b239fe596efe34054bbcdbce957013633c9171e4aab6411ba1140f16baa1b5ce88e394f7df47d9ed216b37fe1ac3084bf9d2ee77359e189926af12ee2b7b8ff4681dd7925604c0d45654ae0ca706e6d8145e0f8242cbedf5d274099e78cb838f10742a47086f9d4bdedf5f96af8946476479291495187c8fa44030c86dd9f7aeb259f9fb1f58c859c0c463e7a1e2916a9d0eec3024b5826c437089ed1b97f5cef705567c8616ff5ba0afbf42245ba0380f96544d61c265711b85463ce04b70ff3581f0cfd9555eacca02b637659df1d8ac157f48030126b2352eba60e1afd8f04615ddc2c17fb9043ea82795e5faad88f43573f14fa84ac68bf223591cc590efb4986bd41e390e6e88f598384736ee75e593f948849bbf17b38810bc8f2c1570143c841fe18ab757c9f429558ccdf4a94de759f9b29fc7c851597542cbc75109936282d6a4543e1c2d313dc796546ea13c1e8d78bf2a3b6eff0b5d477a83ef5e2fc2fdca5ccb52e8ee0d2852763b9bc5a500688215216fbc4cf2fcf81df8dc6973b9d66138208424bcff96162b5a901639106f6021587078fdab575a75ff75e879d126eec8380ac2fa7771cd7b49014ede0a79fbe015caea1bb6d25892d402f429d946430c53a3a0abb3a56bdf505ec083b6f755242a933a747e4c5e7f09bf62871ab641bf34ddbc32b1187eff5b4cf41f000000ffff8c9d597224390c434fe4095212171d68ee7f8509a4b2a3a700d9e15fffd8e5ca85021f80bfd37e0d939016c7d176e85203a5381cc8f2b8e3fae75ddf9951f79451b02d3f0da63fe49b04fc23267b6fd0fd3ee4181d3965e459e00625e20d4444888c5b6354b398f3d8aa5991730c27c9e4e0c202690b180db9554228c1092839779451468b9e90561ed4e77601f2aae756ae07814dc6c9d6630e6438cb4574210787f52e13ed07ab8e25652db1176606ba6457820f679b47ae181ce88bc2b1a4e8fc815c40c9c8ad0577d5ff7ebaff81a5a6e3df2f193a332364b1b3b0e21754a597bb840f5f6dd93010493a817a1cde4fd50c81dfcb57ac81caac25495a430a70102944eff935c15e8b6c84c7ee923cbd1ed5d20dd830fa68ecd97a8669ca588b941eb80768164b10f293589d3074508e0aed82405448ca97fdc8fe3a976d63e3e6fd84706755b532eb1d8b7c8b49c4a757f329057e4ec12616200d91f673b77d329977e3c6b98a7086d4d04ee66abef3eb2febe6f020afcf93c4fb82d91e1afbc01e97a39840f598f10bf337b8912d6b676fdcf2a29f6ae8fbe121bcda641bfcdc0a3c84c24a21f0823c5dbeae5d35e79635179be97264bc0a8d9938d5f27264c11c477385ae98af73ddb9de165cb5c281c3b8d16d7a1d92b7fdcc2068c6530a48d4983fc9ce5e9a53810c64a1b66ca79c4baf858b57c411f39ea49922da4acab31cc643b9eb000becaa8b5d762cc91718487b61686a4423b992df74b7338ea144d1b53208074829994a30fd7c334aebd16b049b4b6d821338b47044bceb7fe34e126238c72a556cdef9ea4eeeeb8a065f2bfb4e3b2aae71fa6239eef07c31619f597fe74d315d361457b7ac3dd851e71646fc4c0b2556b09c0a46622927874ac450e596d5818727274f5eafe481bd4105abf497e04a0facaad88d8f2265f5cd05641f869ea6c1372e1357f6908faa0ecc3333eeb143eabfc2d714cc0bce6f7673a3e0d824557fd86c37ddf117e44a32271580d5e675e16eb6f07ab94f4e5c8429b7255f1b3c59e011ceaf20d00cbb7e0144385e40c662e7c0438305e3db2ac067e0f6d49ed8c69fc676f61a1ef69b4026203f61dcbced004d92019f5b97e1e3cc8d924737be165196c172af5aac3322fc5e9428b8dea40c45f6d3874f86ff9ea3915106c38d96b7aa5b6458831261bdc02364f18373800f4ddaba4565e13fe00cec0e2c9ec4d60aadf8d309f4f5ad0c03756b4b87307c301a88b7b1b054fead1e9f21231674fc7c7fd5503be0426ca536cce02199e2e76f37b144a0953475868016c4b3bfa8fbd7f7ff1bcc3b434a9ca1805bb23326614990e8d37be02ffe0093a16bed5082536a3f7e9011b499e9081e8e7b57c06bad0b8848e4f5ca63a761c913d6bfb1cd65c69b620edec917b517ec942df4d80a157207cf380aef5dd6fd070000ffff8c9dcdae653715845f25ea79247bd95ecbceab2026212d1424c2840112e2ddd1e7731a71aa76134648974ef7bde7ee6daf9faaafe0cfeb18e35a482cc5947beaa82dee921a9cde7477345ae642f868aea62622b71d9f21f7717aea519b243a1abc881c272dcad5ddf2fa066863950cfbd8f2b7680758828af2da201be8f3ab909ef816de5ffbe3fddf7fbdfec83fdf5ffcf2b79ffff2f54f7ffff2d30f5fbefef5e7afbffcf2eb6f7ffef2ed6ff9f2eb6fbf7cfdc7979f7ef8cf87f05f7fe8a71ffe20f56c07e5607156d01a8d5f3371ba9be5e0f0aa59fa473d98161b710a69a53e5a2c435293a298fe96ee616131572126770072560bd55ea76aba6f78ac8be5b17a9883d146c9e8e291466af17bab62bbc7729d6eb3492e0c1db1df0b76193107a78e39e0c6fc8cfe7abb779a11fe89a73c76e1960b6e0847b299e0a5e52c9fecce3cfc589a26c0b9aafaa073e701c6f92392577ecea895d13c3270cd2175671c2a3c43dedf0c99e5d88eab7eb34b3fca4c6dfcf7a6d9214e2d8fc2166f16a37964c736ef2f80b63e54a6c6d87ec95414d8a49940a1c2d7d2049d2d14aa57abd92c458921dfee0f0c7b6a161d93ced0613bcdefb2d030b2f39a42a1a2c2f456a35f55bd2ee89ae4b47cf39f4ee5c413ca3e870dade2ea54b60e3ce698b62545056dc858b61543aba2fd1a5768f9014730f4924532a19ade3dc34d67e3cc9a6e92ac636bfd9b697494214dcf48709f4d94ef94515e09345be1ad4c4b9dd3f635c7678b78672544b44a73402e430f0d3b206f4b4deffacfbc0221b3ca451804a9f4b2d441ca6d297cc6aab0ec9e2b8bc834312942164323b21ab3492021efcd2381169100aa73cad3cc940c21e0736bf9e3374e07792ad34d4ffb98f57ecf9565f510e335c7195d2d8a7eb6b46826f73a4b0d207161b186aeaeb94f58053e8e39e6e0d99bc17e5c2c9ce904e0f0195c1da3b0c51f509e0d1d930f5e178f856a07dfd7302a0ac7aa0c80464d0043db0cd8c3e22a10eba54a11e7cecb539455c3263d5ea52d63b69ace1d1d4cf16c7f7321be268abeea3efd642a3eafb057409e3f9afd20acb319c9aed4028271e7da96e6cbcf7a540cb5066d856900c9bc6b165e889ad55a984906c5f00637db34e360431b6991d8a71d43de5da0f7c3c83491323a1e3e309d2fb38e8230b1f49c9b5d96be3eb7951bbf9c15ab39b18301bca251369482631c93a6cf2c00d9968e7d8eb09c9c576bf4f9214209377e19f7e61ce56d1cbb384bbb9c28e596d61d75c636bc0cbaeecfd3fff9f37e4d98cb271d1d07a8655b92d7695d3eba0a674758f5f04db3d90c521d95dd35a2481673b6276d456995bd5fbb0a1f64e6190fc96f3d52664b2b3376597bc934d70d57b3904f6909800f59d70a1d67a59e889b29bff6fed12bba07f8a0321ade359fd3f5a33d3c1f168a431f6b115b55085ae50a3f272c8894c46f75b3e4e9b55c2ac87acd99c9419a58b9de72daee1c9c4495a9e879e2cdd8f5d052d18523e795dfeace34b776f41ba2a16743cd3e54d571639b2db881bc0e15cbf47eed726a7786c7313457aaed68aa543ce71cfb3d59fdf3ca3922824bb68885ae7cd93a274978b6ef7e8d1c0fc69f911a051c83ef4a8daae0d5b7aa1421864f3527a0a9f98c767df181669635f61d63f0b0f1383cb6e31aa475a6adc4f0e59adf10476be8bfb5d894d9e6bd485bd5cee2062a1e2f4d075545d7f95f6768ac9b3266a0653eb7189aee80307758d638a2e727c9729de581441b589f71f2d2663341c56f90b073516f26b7e56d91260ef41e09ea9f17dc3ac3631512e6bcc72972042af53b58a7897a84482e233b50504d0b2c3a69a2a6ebae0d4b7e9a319ce61a359c6db9ee6aa02bd16eae28a348e3302b03af71fe9ff13bd5c53734c4de9ee347e9142bcd5d4bf4775a1fcfdec5f48180ee9a4d39e9039b87eee605c01ac9320f9b427dbff926fc2ca1ebdaa57ec3b2b1f2bcb68ef5ff74cd84bdfb107ec0a571136bdfd575fe8bb155b1346b9ee693f59bf37054184d49ea17315c1acb421a63ce35c362093849f4d60bb71576a621d6b5e678886665d70c5a585f0536feb61b38fcb4a9e4889947e1eddc65067abf2148519af80174c9c469a3d0159b7ff0c01431456b61edf7084f98878e2da8a1c063abfc5e127f2e391d5d30b8eec7e5c6398795f58d4832dbf8df12631b980e11f39a062d94eff6dd4fa767d33f36f9c890cfd4ed1f501e931dee423f23a54f70c8dae07300ef90abfb9ef02a4d0fd23234af82d9a1d1778be9912a3cc68c4a3d0348bbd8e928d07d252ab6449fbe91448897b6519c1c425b4b22388876c5304f75fb0cc300150af711ab2c819e38ce65ab0ef2918139ba3372955d882c5b6299847aeed4616d47c2fc908d958071baad2f70c477334e8cb27896c901a32ea6b90ea3693d0d71e4770b8cbda834b3e4f7a34110907168b1cd6a3878bc9433c0accac29a12e084561a983af5a702e93abb6d5a5f85a9c503f6f3c9af7d55755cf776ecb0e2b38412fc20269d1ce02d7c3289d344bd6c4d8817ef7f3f43e118116d1964ec3b4f113cd11e3add1e91db615eb9f6a75df4b5d86afbaac075149e7b1f5b6db35932630d7c2b8b7d60fdcb265e6f9f6305630f2e75553210d5b7656a9cf79153fa5a0facdf26373b73688028b1c5539f413ec0a170a0dced21483896cd16ae99c4a23b5b8d6af580ec1c65c420743ba1a236b0e7e758c24e2d69778ba16037ebcd4e4219cc11ca745fd70368c54ba3e2a1e65bc84df26b4e936090bb6320aad554b955bdf6494582ac4f37d09df3e2b4b3fe6f3575f5c16a3dd3820fc69d34cb28318b25b2feeaf45fbab9f37c18f2d012d3a67f10a254baa00435b99e5d58e15a0d632455449ac29a93cbc05e6d9150eb51b0b0816c9049fb31baf9816f3ee86adaaf9371a55bb49d78a28da07a99dc9e36c76f46012ce48b192b7b2d90d2fafc25afbf6e2626a5b3bda9bc54cbb00beb1c6b8cb15497ee855747616d0ad835573ce128a08de820e5f4a18df9c2c8abc0309e81637dd659b195cbd3afbe4b4e1f46aee669b06df3dbd3b8588f6a9bc3ecdd06b9578d674df443bbcdc7646340d6049acf9be832cc7a0941607b18d6597ba5820c2f1cc150a727acd1c5fde19a3d921db7e61b5fcece0a790d7d36f6f6dd055330b5a6f0f78ea1d519737fe71acd3a5d9d746cdb8e2ec0281a553f866fc032d726b940e5f8b4bd8e4dab30f92f57c17157aabd3c98d87a7eec0d7a3dce4443b362f292e2cc34a1ea6125613cc2bcc21d2d16a685baf56096dc9c5cf6d9e93e2ed1eedd82dfd836a9b7486f168907747879a61d2a1b4369d1292f3be5715cb748c307006ab4619a4d625e0b09cce4468fa4461c1654853b466664c4847920d59e065fbcae01eb803b39b3c61dcbb18f63be7bb26d4b0337c7e7d4e98d5e29dd72dc489369492db71a01419e6ae56ea5584f6a146ccb72a57780602ab439f3687015f171bd59038fcec4c6ef94d869d3299b83bc1e827d110c660961dda5696d64746c3b7b9f771535fb5acdd6127dda7d36ae235d0a6c9119bc75791c9e3a9c21225b5f59c683db42c47bcdb18d69cdf4f2a82e6850a62a58f7a5223feec7bf0a086f8916f1c66ebd6b7bf8de1715852dfbaf05730c53bed3bb6c7355f47db3f4d2f5e4c7d09623e8796d61cf9db50c243fa03d5b235adc791ad7c0cdbc9a16a3942bced69ca1a171cc9c0db77085288ae2e71a8998ae9b61c16277eee3f5dcafefd7649ec530418e1fcc825b4dbba6e47bd5a17da7697519c818bd6ba04cb6fdc8e36d71d1169e0af6589e75e4600fce9627d5c6532b04d5b8ef748c380f877976201af7b2fe01e1a9078420a10b4013d68d572ea315b316d55fcf38fc1ffa021f02826da98db7a2d4c48f024d79d59b65bb213aea8c3b06f31f388f839ef0157b24df2ec6487a93a082756513b4b06686225d5c3cef302fc4939631eca048f202cc7d9b2ddc8e3221aba88a2c0a844b8cdfd9cebf04cea4c9dbf3948bfad0c686ec9757ef6ec4de6624a465f45ce4e7ade38da41b36681eb1f67091f5c19f6094e3051cbf1b4603a2cf728cd44d30d3bf81206f6dc6a0a5ef9ecec02810bf3adadeabb4f486f757e9c2f8596bda6c1a968b02428854a9a60c23de8aede84a0c8de63a8ee0f35259480183b1ec739e687b1a78272ad5563fa877f4243ba322b4e2e9684574cb7529527ec0d669a6f5e661dcb651e473b131d704406004eb9b4a628663663046201845b9e0ca293a1d73f6f08e84261a31fe6a5b85c41c01235cf1c33ac9c628583d53473958dabb2cdc57c721ade97ee83bdc4b76f6dc16359afb3483dfe804eea56200a5ac4292c9a9e8630d0c1ed3649c5956d2a0771a26fa8141a523375e82e6c9cfac1ea7390f0f4a6a2fb005b6f74663cdbeeced02466f9c1efafa901e9ae075f543262b4d73bf227a9f43567c645f0d15c78e5ead99bc7e2d94c41e72bd2cd50c11d74ebb1460839961ac01973c96e8d9e39088615192b1c24e485b7d7d7783cf9e6ef91c37f8b68c364172f20ce9bc7809dd60f158d6c60d6bf5cdd7e9a32c5ff1690a11206c8faf90e111a8b177661ccbff261daf97e9b6695d625bce43cda90c0712cc35cb38ce1d87da24540f9c477b10ce09932c5fa1800ec76c37f4de87665f525393f37edcf7b01f72e90652c818fffb7bfffee27aaf9b67ae6c98078d69f1a85bb6654fd40636f6c6256ca40f021adc20f274863fdaa660226f33982ee80ebaef618a96fdd825b2d7d872322f70f63687050d548e581a2bd9b53b998c89c25abfe3f2f8f1710ff7c644217f34ed5302c2d35768df3e48c5afb3dbe6856760c8313c5eb6514d085da3d7d90a26267f583993088b001fd8f603f39adff09851974a5203af8842bd1ec450419898664e31703461f8d3036feddb1b0a8df04df36dab1b18ee92ec876e6da3e1bc70f377a2ff951b6745332edc4417a3c97703d3b22ef37902cb09950d70931a34c05b559838ebb00a4c0df49bddfcba8fed6424d222137c9d8323537e54aea06deaef8cbe9cac078adeb549890fc0d6ae1d5146188c925e5575da39e2a82b6d4d107462bcc8b80b72ebd4731a361851f4f8749f7e8b4d67cf2c97082b8aa588c9b5cb24adec3ae3c899ef93b6f701ddddee057729ce432a056e0e2354524f293d66efb3d5d3ce3364e4cfc83d33c2a9f7dbfd28ab3e6d71cfad3be98fd4633651e0abf6c075ec7ecb62c81fed8af61e7f777e425c137478fdbdd078cbc9ba9064ea968f96cae2a230d095858dc3f55bcb0d9bb4d1f3212b30626856a2e655bd556f6dfe1b0000ffff8c9dcb8a6dcb75447f459cfe859c39f3797fc5a823df8b91c172c70d83f1bf9b916b1de11d91451d7504c551a96ad75a99f31131a269682a80a94f2edc0b315ccb063b8d03d24afa72c2aaadfc67d9661992157b4033501aafa13e056cb19b0b63671b0cc2e4c78d49b2b3941f6460a8ba7fd2ea65b5f90229e4e6653cffdcf2499945586f3da1e42b341e5aacbcf3d7430701f932d82cb38516b64818c7a4aabd06934497a83d9e4793672114b4ec5c46d5cb729ce264cfd9ee477ceb4f078297dc4ac841fdae57027dbc51dccf3454b7c31759b0af88de761737bfaed9faa2b335310943744543ed8a14c229eaa80f3df92beb5c3e3f5ee99816347aab5b6ee96cc588a087bd69a098f924614aa26e42e48f6f3a8b9f89c06b999be13a3400293153f78284916f03d8549c8056b3d31a6651e7223105395da3de9a495a18c6a804f4eaa3c30518a1613cb8c7cc1997d17b2b7a2530b6d0f906bf6bd17b7679163de2120310b58dfb4d95dd455112756f922e3d1d7e900e6f74b0317635f65ef06238883aea4c0b3a1c8c9796d9b7f0ced82809a7ddd2e62a998886ae19163a80f86e83fcd01db96665f058d81d6a5a8b49249f9959d99a2bc360fd5379fa1a19165e062bd66f420680b8db6d324c829aea31ed8bafe67db1ac55afd6a7e4e191f31424eff23d5735dd6901f45f4399dbe0875535b86b7ce235bfdc2c5e3ba5f73db5ab7c6d03d757587e9a6ad090d02ffda4c9566ad55c5a0c3ddda98639446b72d20157517c44ff4496be8df5ea7a3b9efccf12f92b4f45eb39dccf6e5acca73ce0c6316820c02125e457cc7bddd14fdb39c5713cdada9911ccdaedb4f61de2234147bf68e732658f7d5e15348f9d76bbaf691f175150ad595c4d2b0217bdde01bf5d29248fd86199b2c3bef6dea3b051acdf42d51dca45c122341c0457b52b98d12dbbcedf8caf0d4eb10673503bb4bf30da63cbb3941557513ceab16cb5da95bb47cde20a5ee69e0ecfe2d6b2ab105d65d553036abc0dda796bdc671463a54e24995b58c7799dff974942b2c67ea0964475a2cb0e9518bdb110a8fecd077976e1caa23323ddd375775e53b90d185d2953e08628412511f62ab258a8f617d8acecd283af2693120b1ce277585afd9edd86d50400f24cea3038908deb89157a9beb924273ea07c3ba61eb122496c6665d8fa8c0ffd57da4797871fa5933e75790fb64dd9eaec8089d3c955cd4bec6b4c44c3fe55d4ebe6d312b26db3a5b54c4aad30a7d74f4b3ba3a7a86d5e91038d794bfe06053a2da04be96b2c0699cba56b934560fa6988e3831e30ef8aa26d13a981e8229a40b06f4a0ea7e58045a8f9471e06ba60b5296d6a9074f5aa116794472ebe73fdab49fb4569a758dcbe203b5169cdd8b26a8dc7770ecb97cc83bd05f696edbb1ecb66299e6260b7d0ae25cd61653256fcb563906c8b47fbbf1b16cc7ce18610e014651806a5f7b77eb9c36c7955554493cebb68a9eb477ed75f95b9b668e888762177f4986fd5dc6080093bbf5bae894220cff344af8813d475dda156311d7b3d58debeff5d286b961e204ad1ba64dd9014ff55ff685962bceb3f7295cdb939046f6d4dbb51f6baafc4b204dbe93c9ea981258ef3eae78f2a4b2197e159391adfc0e6a5d7b1ade2d8f7822e643771028c92f58489c1bcdb69328a76c0700095a9bd8e47fdd3493f12a723f3159a3685dcd1ac4a66ed7d9e7c4fdb2d54a8e97dadcf7f43025bf81c23ccab37a94e47a3af36a3b5d1932ce6a2611adb3fa3af48450aed49d1b12798fe5a04630ea317751dad670a188d04027c49066d363c55fc206c03d3d8098ebacdb197bb4bd2e59a4b0efbab7446fe88f07b4771f01276ab4e6cda4e0419ef12b82a9a11386beab83a6727efed17ffb72281adc9ca6637299ff13e7a7aaaf47e69f3beab0b00a348436e72b8d41fa0a47eece1566da28274e650ff37bdfa4004c31eb961122f0fe3e550bb398d73a908dab4ded88a09aadb44c2e6817e79ed00e7b74f0c5e9dd84127bab4412b77e1a27194a4a6f1e9473632511dbc551fc2b4c8d8eb75e9b65a45bdb1d78383a4d4077957824731c3dad165452fd085454f718fe5199ed6fa880af94a7d6ea421a94ae961abc988c5a5403ef938949c365b2b5220ed09403b61146722827d851ddc7fc4a3b8ccd89a72db7229e190eda7a7c50765943ac77e3db0b2d579c0231a726d73d515dcd28487cb1197046ed5faf3393dda45df034eabadd34eadaebf7c0b0aeb50492381bda3349db3a355d6b211fd2bfe16e9e45ea44ba379e2c2cd00664a74aed4e80bd9137aecd7324cf90c9d4b8565ce315ecd40cf5420c4958aa5fe95489d9befb16571dec4fb1f54e73ceb4364201c7b0e16386ff044862d430b8001c3583e473b158ab8e1fc7e3b077f914443f3d05982d5b3167a9d5e3c7431531494cb98e60f8638561849843a9f6e46203bdd7e84eadf899730870520e023a0c23d038e1f44908984343fe4a87e3e924d1e8d9dbb2819748e0de10e59a52d1f387de1e2169b7e1cb428541af61c56c192c778d7ca03aac79a1d576c52a8c587d39a3d54fe3f7431718c47d285da0d54b94ec657b50d93ea50b1f0eead17627457355701b7c16ad3718e26bb95dbd4eb7ee0fc605b683adc832d380e29b0e4c21e18434b44bafe8edcbf1770ff30f0663725b0b04a0f8920649189fa0819f0dcc220fce44defe2e302577026520ee52efcb3ca5b7e52da3f3d7c3a51e85b14d5d32b21880b2cef8dcc363a3fdccaf7c4766bb9b87c3183caf0975c6720a29a220a95e0640963abf33c1be363fee435d3fb05736cf2e645150f352d351d52a10a59e6740cd8ac130533526377fde0d5c9240d9cd6b49ac4a512937ffd90c7896915e7cc45c0e7e507fd786caa6dbca1f30de36be1523fdb2a6bd073acf7de44e5943e169ed907dbc79420b6750b6a8e8a814a2c331abbad32bace6aea6a8b5eda2e6c772683f8aaf6112a3998c1014adadbe41b8c1eb467ec7457a8d575946d70290d5455ce8f6ec212df2019d907b5275a0fa14dc27767de8c531a399fc67201893b15745b43b0d88962c024dcc68648ff7f21babfd124d3fc0840de391dd984fb5417cf0c52bd3f3a16f0d70901eda9fe09433135e04058462a768c9872d747f125d6d5c7dad6469f1b237e3598d3a0ceec74e57d7504c9ace8d67103a253e7f3df145428b0b4ddff3e45cb7414d1f75877e98c99bee94a7dcc30a8183baf2ecbcdcbd193caad36cab87fd0ad346c6daeaf27533ee2b0ff41c5142e70803b6f0307905479dfd0e27c95911eeecb9ec69f8c26dea30bd03334c2332b23f3517ec9dc1e2a0c8d7ce1216957a65f344b2ce916731c7689a9264edfa3b8621a1cc26806181ec260bfdf29c626b33a9906c88b2ab45719fd6a7185e806ce4b43d67703776df8c131ab0cd19c7d16e52c548aa67b35d2e0020f92db8e1da463ff53f2bd054a036ebaab69dcc59334c69632945cf689144eecbf43a9b685a5c4bf09a0e73af15df38019fef49faab43133629a1e6e4c1ed7fb14d5e706ae817979160eefe5ba2c00cef9911c72dab2e187e3059647672f1b29bbf0a428ccd7eb033ea3019ff7dd84f7573cf520cf5e9f89e8abdc5caa4caa0bccba89f5421874c7cc1c71c73e4d651d5d1fb6bb7b1892559aab085d1537c39245f7db4cfbdea12859cd256353e6eaf41ebad872706272520d643bf0a5d5072175bbf00445273e1afea38ac84a4349bbe95e2c53826641359b5bcdbd682bd052dc0f64a17d599596de977ba2376646cffe5c0fa06b72bc747b18bbde1109c6cf3ccf6c25e441615a607a01faf1a4440ea655cd81f74a256567333ec5ff2e7dfa6b8e8f25172e9e74211614a3693f0bf2fed666eae9f21d04d31667f11aa313001a856e366fe02685c8a49983408e8693aa7330e4c4ef93477a3d8822660a62f473d5ca22426fff7d5da6e8e6e7bb469cb5287759158e6b7052fc08d4d9debb137b28cbd9702aa4e395a3b5bf2066a707586521b78e8e5aca31bf667c0da8a65fb735c910605569ec96f3f43dcad0ebbceba145bf9bcf2db24b5a4baf7699828c6e8cddc443c6c45c1d8798a4b8bf95242dedbcc57cd103e8eb6b2354e8a476017577e4656191d35463f45fb7022d50ca2d658306b6175a23774f5773b9eeb2406bb58abc5583bf570ba492129dff8b4ed2f0d7b4b0f372539be6150900c740fbd2e70828a8d598b0c90af755d32da11beda3a90c2d0a6bd2c16b455cc4587a0ff67a414f6aec5cb4681a3dd54b24330f54112c21cf6b386bd018472b6691baaebb8ba6c8682fa641fc6a6835a51e0e81c9f63dc2c79498c91d288dfedfab7ade753ad06677657349ee422bfcdefd175e82f463474ebf2cea3d26d979286c5c5fe851fb7e2ac6e567b10c23accf3334a6bbaf3f732e1d9d2aded59112785d01311c0e80cbdf96a433babcecc7d684bf22152d3d9b27c44d8170ba75e5723c0a0cfb6286e429cc23ddb2ccbe31befdb2b3529b3b59adf09997e666b8475e527f672ea3373277f150826ee86b8a6bbc272b70a10aa931e67e6a67e6ae8fa19cef7d2ddcb18aa1d25af5001ce40cec27dc0176e9967935c45e15f241cbcf26782ea97e59b668c6eb35ec2acb450ba450744a102d68552ae6a09a575d653a9e8ba9e8c86b0b14e2f4670bde58b26db0deb2b38b32c4f8e2557afe6249bdd409694b9e6a4c3a2b88d5371318ae24cde451f1456dc46b0ad9b6045ab906ea1695f38596e9f3e431df786341e212b74930bdd28f8f79c0f0fa37a37e2d8eccda13f6505712514a0f2ded3f391db84f1325d945f752d51f987c60783709aa3ebdf80a772a832037d624c15539e5894e9a436099d7a5d1463877e021dedecb490dff1498478ade803f4c0f7af1046fc614d2cba4b38075a683e9a3443e64b72dabb916d9f39b14f13c7c4d49613b76d3b18a4da2c6489609c15ee81006beb90f3318cd8829164a7653f7b78c43be8d9c5f17a8b298532a2ad137d9af9da9469d029d80d31be197cdbf4fe9e566cb88ba7345d51cd56c694ddc6210868979d1ccc62d515964132a3b18d6ff39028b089ade11ac0eacd1d6b2be0679a8bc162bac082c02df591eebe7b6ada4825465a036ad6a129e9c1432e80e62cf810f34b026d9c51573175382f88bdcdd788d13a1aac71df9ddd86e2d7ed1bd8946cbac4a9f86c5c197c2e7b8f96bd28cf2b37406ceb719800c91d7665a9f0298c54d4c05dd9966747a6c04e0425bb7f978af52ce27755bcc6cf20fbf76b7f3dfffdbfcf3ff99ff78b3ffef36ffffee7bffed78fdffff2e3cffff8db9f7ffcf1f77ffcdb8f9fdfe5c7dffff1c79ffffde3f7bffcf327f87fffe8f7bffc8b2c2029b75cb2079db0a4a7fcd4a8baf29df0b2d4515da17eb833a866dda379caf39a5bf9ee6df5ad8504857833f632da42fc1a320363db6168aee340d6d17bce8c5eec979dc0a6ba6ea70edc418130958c15f958d01c6a2f4383516d7db146ae114ad39f9ff09f77a8320c25c96ab12b18bee1d330eac9204bd126450df58ddcd62dba892e62d793bb228207f84b0a8c5c44daaba3840db1fc95719a9907341f2188f0a307f5920e6bd9b7ced0290b21d686424d80568a95c61f0c3151eff940f9a32f3b8ae76559eac7e864ee9bcdee7c5ba9718ee3cfdfeb20e4641cd0da9a4b2ede09fd6fa9da8433c5b249d84176a7b636c6e5d2c2c113d4c48dac39f62d51ae4d5508f5d90882b0844b4c65c32672fe9805367f157aa267acc3cedaa37350aa38a277e53b6fae9562cae25d87a5a66682e6b4490a503ea782a3dcdb26c81ba7dc9d467ded8b92595a5ecfbd196b562896a2bd983b966516f5932cd115e835dab828c44012db41593187e802f83372fdfda5f8ab4a25d29394029de7c5886144b33ef9b22b2de9a2a7ee35804b6be149c36e33cd7250cbd3887ae94af8043e6685482703c3db2892e0ad896169699cae64301c5af5e0ec0e1dcfd40adc48e55d9b0877b723a04eaf17b6be797bfbaea9b03d0e068c4479b1560fbbd6100c986ae32cc8860a992058341babce46dfaf95366946165dc0900e57c93717d63b7b2316d8d6fdba380d642b5ab3f5cdc5161e8a0beda538d42d53712d75cebdd7d214482034728e4160ec0e6a9b087bcd1cd5111e2adb70c1b570eb1bca3bbd30569bc66f08700cd5e1d3ec318c223b0d8f5adbe6675208662b0ed24dac779e8f8a06b9abb9f76089f41e18a30dc37ce32ee8665269b55aaaf9513a74956e56f08336b6c10ba7953cbe9174e34a9b73d89d4770e2b4b9654ce02aa629a37b52604bc7b46cde45527787cd11e8156b33511bc7d3457b5a810f4875c8e4d505777562c7b312252208f4a88ef1d31521199cbe204ad64e6bfb546e0d5d5307b543a6a5874cc6978e482246c146d53cf7c3be039f8cc77750e59b86f470f7b7a7ab70249ab461b46d86f0b9b1c8192a0eda874a1bce47ab7b1b20266940a131c6762b195c6a6f62b1347493dca2e9bc04d012d762bd162bc965199d043ea7ae55d9a916fd3b8c3673cb5ebc3347f41f602c66a9eae7cbb686f2ee6aeb53bdb11d9bf8f61cef319bd93ce590790209d14a184530f765d73f7b6f9e6437a7f993d1352a529b2cfa9a4a5b29806ebb8fc31872a90ee9f3f17b05879af679381d1749038f69ea2f0f22b9372d075adf757b92bdec481f19387a5e9f8c3702d0f5368856d266aab8f48dbe70b045ddb818c47f155d58accd1cdcf4078bc157b5c92594245b51b64867b8648dae48abd8d0ce2f7b20cdc77b5fcd11d520ec89167fb9ef708cde1407ba48a953efec4814ee8eb043aa272d1f8b17293f463de4533d8656858d5255281854a1366edec4493ae6691a2f7b22df9edfcf65669d7de9529de2a99761b37db68b53976679701db21f49ae0c8b3ede110686f443e4914bf49db262bcce8510a93703eb67aff47b26d42461ab9b72714f8bdb664ecc82c32ead5863b76f9be6e7a5432daae2c313d8aa9d0136e7eddbacd52c977b1c2ba73aa06a5ea26d62adddec05cf4e15ac561ff40acbd3b81ae16cca8dac506ee47c252a65698db002d8b34e1d064a558fe1d9c3d549e4d26ab1879e51630c478c917a61d5934661f60ca80dbe076a7b2c1f9a21c098e9c067acf26180f01da3bab698f480f8b559ea1ea5675c06f0557365e1ae6210b4e7b00377abbe1a706341450aadebe2ce4beb30948101e12262b553e738100c9dce4b5f56e8ac3e569f0e33a9a4266bdf54b9d47c50d3c7dc5b731132cc138a352a3c59f4c4bd98bd7f93b6a78aaeb522749d3739a1874ab1fb666da5eca1de6bd556a4aff0101cdcfa63a878ac43aa921b0a5289294046830c20d70ec23ddb6d916b3e9745de9330ad33ddc3aad69bb0110a6819ee8b68da6923b15e57b5c318d5543781fb3c2623b519afb4b51035729a56752c5e161dbe9fed9e867e73c1cceab186d90dac5d4ee895d98f99ea2f07cf8f3e4d1d749d56debfc1173d506554645109a8f7baf9cafb28c5f7cc8336a659b51de63c5da0c02d603aa813342ba2a8bd2a7b0bb5d83212ae96d6b24fecb0defb0b7b96c64c44afca80608ea56ea15671669974d4eab397c49936a68497b18d94087da129bf9c6f99fa3b9d187a47f5649bd5b3668e2d553b7b402c5bdd5ed18f24570520395ad74a7fa15e2db7c8e648d36ff075db34d46241ece85ac2d3e0afcd0aa08030a2b7ed25ce49cdf1690950bbcca6fe4074a3f6981e5061f1531dd8a3b1f947edcb1434746b7a541f05bb9c1fd741ff2991cd0bd907c412e39590f3a23d2d19b77b6d55abe5a8b3188f7859c2e0f5332579a7ebf6a3439ed678df4e7b6190bdbe6eb91f8100c95848a8b92dd90d15e9b6c165e3598d65637acc123aa2ad674c6b8fe5dc6af74806dc4b6fff3e3d2996e9c121687cb668043ed8ac8adf5f4568d88d56b5ccc32c5305004853531d09106c9b12d9139081b127801ccee6b2c4f05e0c1db17dfad9d37b2920e546c8a79118160c47a47a31cd703d5a311b2dda42e539d522a6a6fdda2df33cff7b5d7206de06458b63729bddfbb7006eea1c33130b87f2bc0057a800220999de36c0a2340ee5d6c5e1aceb626ff7e9616ff56416aabe75f27069ea22d16431b60a01c7a2253289f488e8ae869ea5da5228466b693721446e5b15f4b10ed6c20c94fd530af326f1499f78deeeca664ccfccb444cff668064d763a73ab597d1c6b8a238ba34ef315445da45cda6875850a215716632ce063daa6a7226860a9e49164b2b6ad9bdb893a52c6733c155de59ded6036446f011e5a68ab18a13d261973dd34d47d33216d05fad0f541c36b35fa52c552ed1660c8da66bb9d7fc05e1996eddd47b5038f60e0a97f913ca47b3dc846d650010d0c068b70b43fc833a1e0acd16bcc2fe1d71f49c9a1e2c9162c61d506b7a62ace5822705f3483bc6dde2b3dae68033da019d59b2aac63f461b908cf33658c372edca167eb48dfdad43a8ba7350cdc1fcbba36dae0ae22a8ebe482ad60692630c18c19d356a01ba1a2a9e9cf62558feccd4445563930eaba8e40f95fa74ed58e445ee954b912c96dd3576bba71f5e89b6dddbed1fc5a2bd80921496b1bafaa8f85374a5183502df4b4f54ef0aacf7a66217dce2e1143fd847c0ffdfd9bdbf8d8797d26053c0df2b6a9626d3dd6b6c08e59a711ee1ace05b501c2e756549195a2af6fb7eabeec88f6b5926a9b4b514524242cdb3dc5a47d97322c3012206c736d610b4f4764bc15d52ff73110afe92dd2e91cb4731c23b933bc9a0dcdbb031659954bd9911cdad2030d435106e7e133fb14bb322d76ff0493bfb17e69cdea7fc77717705256bae382742be69baa67155375c3787c657a14df7784732e56a7b667a67d568a15be2eebf4a1fa36db8a13db382dc19acda19a1fc06e7fa6245d0715bfbd78ae36b62edb23dbf69425526d8d161c67ba6e81e19b799d96da35608af82b46b44678afbd967b1a581c65c637fad547aacabed05a28e6db32eeab27c0cdaed4c4c6b3ecee3a736c93048db3ef6db6b920cd6468fdd8b69268be7864b1a516b3b7b33ef24cc78659da0c279400d348b39cfc4b54e328d88aa5760c9c483a473e99db5e5835028e4de54fcb55fd44ca9c2a2b62b2671b572815661f0535c7dc5695c03d961e0639c176f94d730a59038ad5e105447259d9d034c04a49114fd6e576cc054993d6ab3cde629b85e12e378e23caa4a5a9c1592125a9bd9db7dffc64d78f6031cbd1c7b06e4875cb4cb1c0def48965c7a3b2d1a86be9349cf8d0b0b0548076514c0a51b0f6a87503caaed1094adf9addc306bc1928e6aa25b059fe2b276a06a5a9c0c6f4882576de3ee79849e29b7b5790ed986b4d94ac0f8473f46826eb428cae20d23c7a6419f0b0c830dc27c302cf0b5ead988e2572b3555517024208cbf2becef15903ecae7201f0143dfc2005fea7acc6b9c772be020bb28c6ebae51ce1c15a788572d88c17f959336c14d2e9a60bb5e3ef522a57b294b48de0ad19239a6b78062c7c5507b8343cb45b649323e62768f81989cf312c368d91a41d79a828abc5e042f9f56b3690a9195f35ebfc8c857ada9b6179b5c060979dcf2d1a3219fbb9629959b92d28bfce8c6f1723ff26d6c76031598b698d2a616e061ab90f0f48c95ce1a10fc797a0baa491db44362de9e9d5577aa24adcef002b79dada7e23ffd1df6c4fc65916b7c40042c7bd7b15c5e156801a7a1aa0b2b55e98b34017b8d7a1f85de49d9943532c6a4e5cf4faacf5d687b962181c1a06d4572dffe46184de39d1082ed0e76aaca23530a71be45a2d1bd6f22c3fa4d01a9655267155cb0d9abb7bd34586936513d3e1ade2b59bfe5cefb54ff5e4912a65150553bb63e9b72ffb797235765aed31625b4e418e32caa5a83c2c720b75a1de5e90167cc5771a0d23bd1e02862c899e35c32fa8754e4a9d13f3d023b4a97fe45a73748bb6801265895c3ce5d05bedf3398c52cd6d8528a5db4f304d50ce87cfa7db340ec88997d7070d8fde34d4ebf295625da7dd3343e53693786d15e2b1d99ffa2a665d9c7bf3b791ae38771463e44c2e0af90893cd415a9a541fee832698c1861bfc4c613161742ca3dbee64cf7af1beaf3a5817fe8aa4d97d6de7c31ed5d478831c8e9eb697a2f52a3e75e3f9b621a5c9c19e111bdc1cb380cd5eabe65711d8b7b7e27a69cdbb79a81682078bb9a1f6b51e67505ea4b7fc0711a332b9007c6a46b8084515918addbae3f2f7c9bb9537a9ee669e7a602c26cee97b7683679e8241050f792a5a33f4f730e73ddab2fa9cd6ff070000ffff8c9d6d6e243710434f144052a954d2fd2f16bc9e369025b519ff77b2e371b73e8ae4e31fc71015a23fa0a6b1b5d298038b3a967861330cd90a86c3b95ab6adbf2010368bfc26d9be53c513db46100fe4a8a933e65cc8700cc9cb4a3f384da7b61b6230499310b0db6437b1eae9985287563fb9bcc6614e939b70f05e447f4028eac2c68fb92fad3eb708545f3d335ddee5a36996956c4468dd1996b7ba302876a4c25263cdb893e08e0ede4872586a1271784efb5e63cdd62dee4640b39d3ebe4dc63fd30a5ccffa7473891df693b11566381fb7edd68ed184d66ae39e0de8a5eb1889f25d35598d2216a425a30c9acb6b0f614ae9139b27777890eb1a69eebc783606f2cbc3fb7ee0613d46ba6441d38f5bb40d6f634aee66ed39dcd48cc44b46e5e877c0c3bdd4121a4961d3f60db4a6f91799d7cca13096417da9d53432b93cce3ca76cf3eb9dfd4518f56530147a2e4b3fd6ddf5cd647b6899833b70df928c9326bc5f5ea4c7bea89f9f91cf325b5adf09cf464719a07a5424a61469a4d1ddfab101254f500cefa93bfc659bdea0ce2cbbd45ce4b5181b5c988e3658e57b6e8b09375b36f19a8616b7c4ae6656b19ae3d0aa6411f815def79c845f756673357900de195a0c38162076fdef0949d00f16bf48c43e1d587a85bbabb1970cd5d8b5ad4109daeeb635efe241ce719615f00e2036cb1690392b741208a2499dc28dc485e6d4f324bb83fee64524cabe7bfc4fcd3acc9ebec72f9ed8cfe939b1706b42a5f7694dc100e14fd965f262407bf46a3349c08399e9f85b62535e939b5dc59f59553bccaa4a1360d93f85106060e88982a6fac40d53f37418ecf33dd379d72cc66167155d70f234aaa916cf8675883228acb2bb2a51d969478ebe56fd89307a96d4a7bd777cfbff7eb6155cfd4635c933adaad35fff1f46d799de51bba3295f2a6ba61b9b770dc3e95f1ddc208dc3888150128629e1ccaf54f23647f90ffe013b999e3812dcb1926ecceef877add370351ff714ac1c5b2af14768ca1e8ad44e3b24d3dc94d62d7335d7e27a19ba078f08293afd2c5899352c315394672de3d500285ffeb3649a641565ee63ccab3dd3aeb5d0589b3a3adc5efff112c05db5011aa2ac9d0d3066db2616095ac54ef9b7bbea24de54b668b2e397de21074ab881bc51dec016ba5d6460ce52eef8cc65d62a2324bdbda28d71aa392e63f46e8a44c0acf040fad9d1b5f4999163b342418bc17d1ebb550ecf29d407f99bcf95e656ba9a3f1051272f5f7c89213e3f1b14c584aec919f31c5de747926ed492c0a09d577b6d46f466f6b604aa3b8dde4623a26ef3cc192d7c12f3e9d750336f56d74c77008e525ab1dd989f793e6c413de22c4a36359a689ffedd255b4e7b3ba804b5271e5d3c96da85067d02aaa37a78e0a52fac56f6b936401dfd0d16d35aedd41abd756b5749f72c727bdc3ade7a62c7d155a8428ec1f968ec39369a6d108cb186391469fd0566adeb69d5320ef47906521635e8eb4fcedb5f7edd5649c5e2319f7a2c438c5f850e74cd1a9e93a7bf327ec1c8b93f2f3d779659851872c5f15b459e522719909ea3048c3ee6730c96159606a24bc14c94c29328f96e35fa779c0c37e5d3969b1ea10c4db38e0b28e025bfd459ca65f337fe7fccdf300db79d0b68bb357c2b47e33a96895f9082b437664cf776b5a7a14c49490cda9a165a17f3a1ee0acde936aaee785ff3abb9eca56b0e5dca275dd465da701039350bb88d9affb99e0dafbc87cf952173b8625ca85c86b3eeeb525617997d9b8e08c0c0ba6d310ad9049c8eb7a50c4a2283ba3facddd7ad418f51ebfc152808167b3372eaf58b45b86bee349e4f8b95990910bd4c08673f88dd35189fb461e46fa243fb701bf646b4d9c7521bf93a93a39cbb040250e03781f56d21d84351ed4070b7ef2a34f00d07690935ea1997d287a27f88dc240774f2317236b31c411b07456095effb1cefefbea0777e5c0a66af2a3a306de63ceb34a5cddec8698f0fcb46b39098cfd47bed5e414c41c70aa3eb502b3b8868836931ffea2a19c75ea7865703626f8b6ff4d4bf6514d07db2a5fe0dc7a693c64e4105cd41cd067508d1fff77bf9170000ffff8c9dcd8e65b971845f4598fd002493c91fbd8ae18dac81210396375e1830fceec6c7735af08d60b96a25a0d1eae9ae7bee613232e28b47cb6f99f6c46dfc9ce696a57aa319353f66b98055f145d86ab41face0b2084d1d612692d93b43aaadfa7799237d5b07badf4aea672571627129a572fc7ee3b5bc7995bdfc6849c395df39b6c77faa8363d9740fd88bddcebb2fb6a0bf7f855da567177097be6772a5c5a17149a54999245850b9ba5df1e3d3c4f9bcd73a3ded36659088ecc3fe1a6bb7a91b84da4e51ba73928a22bfc13e2ebb0c972494aea2faee4cc0a6b477f28f9a693ee78ee5cf33877dd3373fc9da6c63b4d3521facb6e8f6308246cd6529bf03a7d3ebc65e312ec9566c322696ed1acde67ad224ee6d00753a2e6f8ba0fbda5c87372cf4e4f7ad6f5ef8ef98d2f64a473864d7c136f1bf776b52eeded143a7408dfe1d42e29ad77daeac23299f94c58636963eeea5d3fa62649498db68af9341472e46b7754f5baabae0596a469a8d8ec3555129b1bd67ab8c0016a8a32b274daa54792a53963d1435b0e0e8a7b7a86bf1784c3d53b11280ebf9082c733276355af769b2b1d69fdd2908329b35551c2e28b58d90af8ec7c122547f6676ed7f86bf9c4d39c07ebb3ac205011f4de3e4ae5dab50bea09ace9c234c22d140d4336111dd091d4f926fb2decdb042194b8391346756add3598d6ca77d0a735b3f48c512b0c2be5c6b877a389444f8b8ff776f55337d31aa1735f0d36a1ad7bcee1cb37228765df3f79dc5754688f76216a17962571d3baf0be65a1615b29a6960a1ff79f0e1c770a33f86f4d4a3e49eacbd1fd3e5f80c871b6bb6d1016bae88d0ef6ca0d86b7f2dc68396ddb03f170b3e1adfd014218fead2cf9f3e6c23de74da82753f574e79987ca6b3644cebb85aa1749c96086166b22f033a9219bb06d561db6c683b19fbe5af75c10adbf878e57bbd64eaed7a090fbfab1530a7bec5fabe7ebbddb23afd96fb496a56748fa5952a77ff10579648ed384bb2e57a8a6168a9d6fac9d577ef69adf4c9016d4e9bc0bb6936975c1cb1bab85bdc34ad9999709612757bd026a1bf53a8abcf3ba0e5da5d846e7024cd7e2e5c05d50688186aa3f6211097d1b60dfc87f9200ff7f55b7c6526b067e8ab3b3a6b18cd1ef5b7577f3197b4c1f1c0252cfa709e0c078ad12a1336cf86de874fe3b7513bf0c3b44f50de7d3ff5b48974ac06ea9e5d25ec967ca5aa5d7dd597bdc63b4dcc910a4ab279ee4b7acedda06858b8b70b7d1affc633636f8df7d45ab34a05a0392d76ac651164d6a66bfb7dfcc26d6f09d147a31b738dddd45214fc56eda0e39a561490900bd69c751d5fa4c4c67d645a4dc329d3b28d7c07e3bd750552ebecdbfe0117daf6ad53840af035dcf439c31de089d3dc3ed4138dd6921cfa8ff4620c9c745635d5b413a6b795c22d894768909659fd0ef06ef5ac4acb1cc6c83fa9a2da7f0054a98da7c05041c8e99e71ed33ba31d3cb80f1aaf7c436aba1ff0b1f77b733fa8424c35a680af7c76a6ccb76f89c3f6a2500cbbf4bda867403e3321b04494d6fc138bd70b60d6c54f4e9eda8cc93add67f5d56d2ce6aa7ea4f5dea4f561e9bf5af956e1c6cba6e24c9689872b238ee155a4e37b075596d9cd9f32796f3ac91cde1aba3575d1c52a8d953dd9c1dd95123ac68e2daaadbca259f7535cc5375b1752aa2bc2dcad4506edb55c5552c4f06da7dd7fc552dc5e049cde2dac9fd29c8bd0159b38c8a6f43af1d225f42dba39e37da37fea4b7b43be312ef1b54dae94315b15b33f2f9152e6db53befc92156ed773f18d35ea88e0e7d023508d4dbbe6ff8e8bfcd893ec219dafbb4b9728643647a0c7599362ec1fac2500bfd8b5da77e544dfcc8f95d21387c7bbbfe4db91c1ed2ad297f53419d65348a4eb78336bbadb630da9562950ea4415b54dd0feef49812decdfc26c3ff8c7ab8c2a7bab13c33f1827a8b71622bfdbf5687c72e702f7db1891efa2e932b7805397976cf6aee713a11575ee444ca3075719cbb9823fc424f0c2e72c3887cad9ea74d8f598cae1a4aeb3424a94fda8a93be743416723b698c3c98cac51a7a483e859eb1c8406ca4cd6b3aad259077f6660cd4f71b2c052d9088baf41a064dff53657d871aded9eab46c7d9a4a1b6d1177b4972e0857db97ee9856b5d50961f8ae8e58a4babadb40f6d37e735818e915bcb404e9f1eeb5928f8daba632ea034d78588297c8a9695cb7aab5af406bb5461dd64f8d48d4adae65766f4ab9fd5d21b99b618daa3365daddab4eae6e9f8616a97da11933bb225cefb4cdf376ecdb681ab6a8f8f26f805f8b09cba63cd069f635002fbacc485fe7381cbd9fc0a02a42a189f67779beee4ac3a50e4aaceddde776b5b3e391ec69dd169f3ca9b7fba85d60c85173748ddb9117ad56cce0608e1708d18b118a3bb533c3d3fc33ab5a53f8ccb965b5ef96d16f7bf7ee1a731ab99a9a485ea1227fe23a6eb0b694323bcbd8c62662e56135e974cff7cb70397a2f17f740dd67d76f17d0b1ad029df994495ac7057ae8cd9005167bfa9b9afbcdfe46607ff4e51cdb0354947154f32edf348c0ad66cf44b4a74d174e268e13e2d698a40586c377b2b17e26ceddef291d19b61d4c9f4d22bae9fdb789a94f4ce2ff4bb47912505e0f98a19ba1322ac63b2e135f67fba91ec51ae5d6b246ad938caf6b78fd133b511ad2b06491a2d2d5ccebe7dd8dda55648492e1c6abfc38ba0251f671a63df7a36165acf9a77d942a8363f144c49ebb777e8c62f0edab0b1e1ea92e2c41ad5c0dfabe82fc26424a469974526995155a25247f9f507f3fc017df020999bd3b2ba8da362da2763b8b293fb6ac3ea4c989b08b05a64fee6c46ce5241174a0a5a3cbe7b9c2e496ad19ba4e3fc7677e9df3d3ccf8fc74f76aea40679164a5164cd42bd2ec98626279eea063d826ee0bc1a5ef3aa7925a6096b55484b9cf69af23000f8aef2d4fab973ecb4027b74389ebb4bcd535ac8ac6317b588693776db7a64a422973ebc01dfcc0b5c4ec8ace6256f57bd429c771ccd8da9853e4a5c6aa4b6109bd1f02b7f1a9e0b9ea9bc6cdcd8f2d8cb5a26a0436ef5d03e18f3d5efe53cf68bdebda4ed78935b731758524f5bae8480e18698fe33534236024a3277eef3be982be6fb5dff4af95327ee4a5bcf60b13e6b0c54b9e57857915da7029fc0691b8af45490fc55432ad5efaded46635130d9ee032cda7006c229cbfbb86cfeabda6692cb5656ec76812912ccb1c2b73216ad98475daf8be416e3c3f9696da6dfcab3fcb1d3364ceec0094b4d61715537012389855a6da44f1d6fb6bff7cfef77f9edff2dfef2ffef61f7ff9b73ffee53f7ffbf39f7efbe3dffff2c75ffffab7bfffeb6fbffe94dffef6f7bffef15fbffdf94fff7886ffcf6ffaf39ffe49b744c3757106e5d096754c6ed40ea89728708da9d1b94290b09067f4b2f46ed559672cf9105a1b6472b7091289496ef9eac2449dc1d5ac1bb2913c642dd620b1338a89d60d3092665d4eca7235cd746f96b02a222ea887ba428383ddac988786bbb615409683afbdd2ad58c35ad5fafd4fc5f8a2c16a8ac26c035ae718316ddbdac8b05bddda2ae6d069d80c8b46373bdf51ab4980d1b3341b0840c06817a7ec4306f76c3bbd9d0ea6dc287a468c5d7186dba94e845775d4394bb8341ab43f2f5bad6207e9a606e4186a32ee791a384c592349a986c1c139a7b3515049ad7d14cb18226de21eb7baa7930ad6bd6c83e8b6b56433635a570ce655f566d4b5abb86e28de2db6955f6b566dd80472573558883d06c3894a5fed2c034d3a1b45e95bb491a67594cce0d0d2377e8e555d2f00a0a699b0b2679d569059fa1acd9a9667a4ad3066e5ce203fe6bd28d0958f6976fa2d95d288d861bc1b50ca5b0d4e9476760b0243bf6c76cd67dba84205f1d5a9efb9b67bd70dcc3889f8adf0b99c1e44e22d6bd2433bc9e0ea4b8966fb46da599d3310948219aa7c746cb266ef1b6b0d1d03fa91a5f49ec0e6dc60f13cd5e974dd0580cfe6796aba8c9fb3887a38d08b50bfbda8595bea6b62e009d037ca31f7199a88845a780511339af13a0e4dba4defcf8eb6ec6ed680b8d845850bb2f8c7236398c85af0c5a7e194f18a1874b7ce42a78a17c222584f258ee00dd2c6cee1235eaba7db4dd7d1dcea8c0258d7ccd0d13f881018eee734d0f885f5bc442f528f1902c1407627f1ae6a1ba3c0ad510d4f59d2aa105098cbd49de9ca96e3d2a9b48ae9c68cc3c53ec1d34cd54ae9eeb39806eb8384e28df17d9d6daafcd7a2137dd3bfd8629ba868db3e38ca7dbad97b5b17d781bd591e8e8059d737575241ad3d5815b3aa9f3be31c68baa2c37cb8baee47d0a0a60182eb50b36a7b96c44eab6f2ba23ade319b5878074c77dd03b18cd46a6e3f4cde1f55425035322b92efdebe01a070462557eea6659a5f3b965d971a49256da93dec6855639e5e1cb396e08b1e66823f5738a33eaed5661473b68cb9d6f002104421e14acc1da5abb98313715bd3ef3356c0ea94ac7bd0a1db4c095dddf0fa240496a1e5a21f088dde6f7794661dc67c4d55fa86905fac5a2f1bd71ac3eb626fd52b10d68ea98a10f982f05814d7e6b115ec06cc57cfeb39b6b1c2e820bcb052b156a863d78ea4e76a5856377b327ff765d6c6ceb3596c60c08eaf927c1e268c18e7c1608874166ced0c7ddc620753b4fc550fede8c224fd6c9378b07482157b0a85f012698763f50d140ec66ab474820f4d7181272adb8d9213d3458fe4f454b704f85b03e6af6c4ac204be1b56e15cd602336d19eaa8ab18a6a0acd6aa3fbf944e59893426e854e272eb0734e0d8e993d1546d7be6aed38d387317777eb56564c223836f13c7f133765f26e8e979421e81603dcdcbd4e7548d29c7a76ff09d9927de7f79862a891e93044f34599f024a2ae4addd2f6064eef535d575de82eba63d449364b352e09317a9deeda87df01dfb064e6d35676d1133d1af1b810aed56efa7adce08dff8142dc68931a5f93686f88b6913a37645becd300f0e4a7fff5c923d826ecbd98a9518ed6d76d056470ba37d740aaab661d42e820fe906ff97b6838db3e77af1101a86b1b8cf9625d7a718f8fa2f9697cf452399ae0e81dc45a7a4083a89447143912e45f5dc49984209d86331cb18c8c9de6140ec2ce30626326c55cd3e36f7765d8568aa65a3711898e058da70d87735864299bbc387b5bb1aa2a7391cc88e99971387b2850f0951a3a3a95a05f9d72ca2a033b605b94917587b61abb32c5dc0578c70cd83338780a6699cd14c7339f5d4eafba03e71e8cb0615cf1466d7269f9f16c3b73e809753942c4c44a98e0ed973747d80b16ebb31626f9b50118d67a4394c6890dd16ab9cccb8fa0f4b21a27cf9689eda678d1eb1fade262f00421ada2f9d6dedeef468fae17b6ab7c4b1afdb81090430adb67c56a7ee9363f8c47d3fefa0c5ba4d17bc252ca1d16b46dddb7039dc3e549d85efb175be9aa88cb2d8ba1e8258ad2c7ed7273ce66917d8404ab0344d0fad6c290ff6cb740472d8c5e06303775caa4d95da7a1ba77cc0fd655476f049c338e43aedac50ef2d2ed8b1a66bce67f3e2917fc48204b2ccae0da3aa681099afb71a5a5973f474ce1953aaaa41c1d659302dc14f40e4c35132878a3ed50d9247f6df06d2efdca0a70939658f66aad9f54d7c1451934ca07a578634d32f47d666f3682502280f479d4069ab56eca674cede5f1a477e6c639b80de38b8d6344ecde594224f542cc85c665d6956a4b95cc2ad80036c7b941307b91a693ae267b5dc5035931a662cdd88f5de5b5fdac7d0c8ec560d52d7462a50f774583bdd0033fa1aba3e99986f7555812e113a64e4e28ba5ded0b14c38cd6327d1b7fb939936fb4e27dea30f66f6584bdef9b8140d20d5e668e955eafc98fba536315b2b96103a155cbb6d1bc889261a570ac6d83406610d9dfd77ebd603101b9fa13e80adba3bf6baea7ab797f6af8a9dca9dc83dc8e2dbdc729a3a950a45818fbeac2e3a4163cfa6df94a00a78c99137e840302449426e516a2e91447bffe63e0b499589ca9a536172873cf3d97ff53c57474b1d3fd188f9cf6d33f8055cc6daac04a10e4578c724436135e30313c1d087aafa2d1b168446383a3ab24632af97a1d2819ca8f8039da1da3a000c9445c8b7438d9203bbfb9b9e82546506c06ab7f680d378a561ab938a1e7a4559cd43bda8ebcbed9dcf56d1f858a0d68c39b2a1f4145571f7695df4506c0c79af65c7f0adf1c24db5b1b70cf1ffb726e9da73c04b77841b8e36fd3316d6402b2a639ba044088ed54f14ec795d00c5a926369d7cbe09b34fcfb67ce479c61ecd0105b6be54b91407dffc66adf58cee3eb4b53567185bb6b3046d66683b0cefe63cb30477692ba4baaa3df441cbb5a51467e588b3ecab9b061a8481a9e1a0d979ede9e08a36697d6e116bba3dff9c8f56e23481162e5ff0b6a13f03d2173b2ef5f5655990fbd4c12df74a9fd1c75ee6621b7aa4b9ce916ef9117e3d3c6c3aa7bbc0579430d1bbae63ded505413584ce3cb6ffa1d678513c1fbb3d7040df70074d6d0a484b30011e1329567a76320b969cbb7d3939e00c187f5a1fe580024b584c33466ce84a70c296af5d102cd9a6be036c127f8dbd827ff97adfcceb787e6e177e510d9bf702af0e44464f793b4fbe54bd7da7f6cc62db0c158863a12f17f230e1dc8319e4a296ed6246da96ac8d18db28f6412e5cbf2e412c5fc9587d64a8b395a2ebd5f48b49e2ac1a7f066f95fefb7bd9751b2805a6b985ee8090e113190655c169a863c2f5057db64463b8180eda767db3307e3c45582cf4a70d69deb2d28c5845be2e99bd7c6e389e41034ce336a449efbaa41b15b1c0c811bdcfcfded147c580b067023d5e0e15476a9fbbbb69788fd58b56ef90079c2e107fbe5b1f33c9b477734d1c07e1fb769652facad7affc2bd1ce693f9685bfdbe0649df4a80d3ffa72f9155b9c636d7525515e635b56d06ed59bb2565aa7151d15b3dafcbaf718d5ee75745a355bcbd9b4796e5abcc7ab7de738a4abb94756ecad8ce8a0dca16b6e674c07b057b8f2d6a200d8c624f9ba5b5dd3fe5d2349f7b96f3bc3dc43943aeae4a107e9b3ab9c2d2f80b751bc9373f295db5e1f79db608246051e613f8371029dc6a5bc78defcc37d84ab4d17ac11478fa8abb1f95a3e7dd72f097a146387d967f3ffccdb0c197ed212a3a9e612c1ca10f68443d40a7d12c854ec746a3f6273510f11b0f1a1747b58191e82a3324c51a46d23c8a8f7259ae5e2dce1f15c6f53fdbe818dda46c524dbbd941c4e17a03e87c467f43f9e9bc21f356cb040ebe262a80bf6891cd295adc8306854856d2d63563fe810b59772f0e8aaef3efbf9f0f5da6b5b77d87eecba66993f59a2273621055e9fd22dcb4fdf1d9a5cce66b7de3cbde33f91fdf5e9cf7f26f54ef158ff468efefd7a31fa72d783b9df17be2c024f99827a0ef072da2bea925c382485a98202b1e5b2d26b17063d1d5e90d0e7e7b4f6420afa9aba8b0f3a7e8795af7b29f4313ee6251cc9d334bb11a42ff34a63c7ae5a2fc77556b502f2d9a455b1d27cdcf5e21b65f7d4425f26032b75ec6c4e9bbf9e9e12214b55603a7403d45e593c6aa0f7aeb719065686feb90322c2ba20d9473724bb6b0dcf83432c5a3df36dc00d6a3f1a4fb01fa8131dc791dac550dcda5c7a4ec46982b4af0e261e3b2d6b6fddfcba6c63fabab45fb5690953486e59cd1b1cbb7eca286f572f9fe6b7eeb0ba3b545b255dd591b6cc42fd287af9bd9bc3463bfc5ff9c5a7cc5c1fa3093ed4f633fb33b0f2e2fe5bb3151f04e5a96faf380743983acf356bdb53c8554d07775078861f9bd4d3691d14b522db9879d4fb7935db5ead9a1d34ab9d1f5101bc17eb35c1ec33b55aae676f263a5eac01cf373c63d95db96eee9572f919bd6cab9c43453b95b60ebcfbf4cfbea80a0e41950debe489b73832eadab4437750886ab778087f0a0dc67c883ef423f72082a281a1207864d8ae68d56dd035aac56637cdebe61d2b9427d5ba2ca87070430e26523ff9cb4e6869164e536a1fc57e0c3356d6835253ed10593a2c24ca0b1871dd9c45b46bf91bb8ee623b2710abdb10adc7406f4711e153f3730730315d4f8111f26f2aed64731858a3ec56dd80df915aec1c5af40068c7ea4d6c65762aaea04ef2d67a759e9345e28facb8ecee2fed2654045bd1cfc4c536ec420fab42dfa11484dae637b0178b5be46a0c091a2f8b557d44561e71edf4d9d98ad5dc807b26b761f7fc31ab8c29c82951d3cc1ed120cbcd1f6cd94a0c2a919d9a5dd39b5cae415598ed356bd71b0a7ded965dd96e4ae06e3886f6e7459f43ef37d067ad540440cb544c17f8bab94c87652beb6f71b230a69440cd5fde348b8fcb5f80a4d26c648f8a75d4861cbea42928ec9ebdafa1666ba66dbebc3ac9773adf9dbc92eb73b9f88a187314674fc52acad680995b879d450bc49596bbc768cb4c3fd1f10178042b092158060c8f8c81817201c8b5f29c09c0dedc8a24b1c7d01916bbad32b116bca3a23a01eb130d2edec6f0362a5df4b617dbe043356ac3b6ac5ae72eb7a4327dea0ffa9435d272db32df5d98c0368c19e20eb827f97ac1e22016e05035d9aaa1feda4c41566876cd531c4b5235c0befab2def5dab405618e593eb758bfc0984631a07d655bd6955526cb5bf503efb43c5c5bcd4630687896b2044fac233faf9e629762323e5b1fc38688608b1d1a8eada26b505962070052b94a3100fcb9cf99e28129c8ecc490b7b4be7eb45afc68bb9a46d92b44f1ac760cbba0dc755a36c1d5287f6e76790f620c3cf6bc8d32ba53884cf4f885b56e6deafb6f8cc3e9d0417a642b0614def4b8991c430675eaee947ef918c67103b4d274f8cad5942b168991c22f0317a5363a144d6d5409ec0776020cfa0d544619a0d24ca562546eddcbd1c3f236a5a30a84b1957ab70c6b41a9d653a197c5b556d766dc259619c6d8daa8f9174ecee8c6751bebd378f9d58e918f7f68820317ca5cdb530df25c3c6997664525e804c6003dfd454393fc57e2456566a89a3d5db47428e5992a045db724dd6e8af702db3cac5008550760a83decc17a4aeda5e0818b11b58b85c0a1461bafbe27d5352a92b6a2d26d5b03f14603d07be2a5d579ab0d9a18547a98eb9309fabc9dc7f0a5e71cdd10f839865b9629ab748370d9f3101ac4da448250212e93916ad9ce71f7e1eb49500ccbfeaa6c5f86629ec478f15c609951ccb04ba54fdbc6081f6c39aac1d5fa25180ed19d57b96a1f032940eb661b3c065d604ce46f9357dbf4490bba5b31ff4463f53e340693b8c9b511e564a7b7d52452a16434e50c627c320cc49e9f89f997feb7bb1e2ed75800d3c4091feb37ebc618a9b5f54bef208aadb754807035eb6da5eea0e9106bc9f667258f91caa551da1fc3201323521b061dbdfcd5c88e457b7b91f2c52971259ab41edbdb89c9f141cdd36763cf13425081bba401718ef77899952ca9c0515f4180126d9a3a02876af81707eaf84cf8f58a7ad4f8143c7fbfa6679fdb6fb89ff6ee30bcbbc203c29fb558d4cdc2cae2a41d7f9037a50f7a162d14bccde94c21790f9f9be89233c644db3323ed85ce01af4ee19ab3a63ac110728db50b8400ae8ace686b574b9436e429337951efb49b51a16834997edbef8cc73ad1d4b5d33cdbe8fead7a52327007c9a98e93c764ee370d645c943ee63097615b9f5bcae7a5ce066675ab82bd1cc2e598ac3c1506b2a66ab9285aff8aee6d69d55a84e33882b4a5cbc3a6ee5d7c513c3bb4c8151d7b2e0d9656a615db66726baa7a563596cafee1d2e50ace47610694d5e9771f9dcfd465283816dc698bb8a5e2b07add48e436c61f2291bebf59088c3a1c9e55639bd10a414fbf4f7daf6572541f3bcc13e52eed6738981890b446b976bf28734fa5dd4ddd2920b5c49db296d756e318fe2c07fdc58d9f2d74ea39840abd3270a36f660101b2636b2c8d643c86dfeb3a770e6a25d4aac720a45fcfd6c3fefeccd6b1348c1cb9961eea2b1615f4f283ce521427ce1cde35a7c77624962fd672292c8784cf5239d56e86cf0385a6a51fb32f68ce77fdd4dc9bec4945b3d10c0b28bc72f165a6737773ec66d91f17551e95a2a6eac4ec454ab32b178aa56dd2c76e756fad0b2a332c2b482f4f6a7bda60b61ca6d5451d56d46791c8fb76fef5d1f05459c43cf0958abe607e95f7da444583852fe8e069b630311ac1ab794e47ca0089289a6bab7c87adfc62d5dca5bbbb5d7f8aefdab74718040f525a51df16c0c269b84f724d9742ab2fb2225427a050aa513c5a6ebb4f6011d5b0463272e90c3170565efacfc63fae5fff0b0000ffff8c9ddd6a1d471084effd1442f707a67bbae7c7ef6282834508b1e3102b100879f750b37b48b66a4ee42b83b110f259edf474557df5ef5410cd67e5da1b7416b2d3aaa25d4feafdc2d2d84e6fb3f17671f7ce291d0fa2b197ae0d53cf70879a4e3f7b34281b6aa44647ae905559353b97cba55f1bffeead516ce144854e15a676e46066ad8363ebc175f70baccabc44c49565018969152e09d98835f3b2817a84ce1309808c0cc748d7358585c3a35665170cff0c872fcc67ce215485ddd21cae2fafb283408f8f6c3bb7742aac55531c0d58ab74b1e4a3c53d74b7d2bc54516f51f62617149f57d8c2b9adc40e7253b5461da3c7c7901522b62cdfe94cdd9b600e150a775f6e7b1ba376968a5132d936dcad4c45a3a0dabc48f33c382e2ca03374eb765e662c8ced70cd3b3c5f2236d555f2c30b17cfc9d60063d9d612df5d36a32dc6c6ad89068a64632bfa263a4b6858ed716b536031af37c4003599fbde71c00c867ce2921d0a14e02ceaa1c5a2ee5a441eb8e32475581b8aea98b7ded0ca2856634c30f34d2bca796dcc76dd859e32092a23381905fc0247ee90d973a19975d71fac0656229cdf28508225506be84a033d99f7863df948470b4732a50c9c825642ac4a26cb4c1c46219f8c68fa272b01996a19b670c471ff6bf3c6570d34ba85717c3e517bc04a887554a998c4df51c398bc4c5d3d1eb5b36e823e9d1adc178d2674975c0c3e6cd79b0dfccddccdc8f8f0435eced4202044e429bec98938005333713fcde2d28600a28e941d4511d91c15d2add190833b48089a915971b79d9a70049b108f94354bd8ec53ea5d76d21dfcd2559d40ada6acad6d64a670a2d009227beb9df283141c363d74e719b18322806ec3b08ebd2ccec2ee4199eac9801fcd239f41952111ac320ab204c62165133902f0c5322555d4071cb2a46561eebd7c7705029c7d7c09e4d15b52e071d308c8311239c541dca48f69b6a62bc5391a9f0df2449c6def29cd5503eb7ad9e2c0eec92332fa493a57bb0939f398a60100e78437daca7a0a680033babc7dbd4d978375caae1febef9e5580b959145239b01be3d229c3d733c9ca2b22f9bc238d007a58b215270e4da6e1cd0f6b15c792b443a15e57a4bf47e97ff0a7ad597bf310d8920feff8ecca108d64071a2a2c6a1308bae4ce4f6a160a5ba57810638fe9213686f485ee213a35300d4beab77b11b7adcf15ea126b5d6f63309774d47e7ddf9e7d36627c928cce213303e1ea0270d9b91ea1d1f7cde10edecbe455778c5947577d24277f8a0efcb4d872b5d9e1eed3b29df513ae952a725415038197eeb5f299efb55bd5616ea89b6aef0041f85d55c2dd4b6fb1bfa6f2e561cfac5ccab633a46fd901f0674aa209dde34d1c4ad8940f368def855abccc23749c83d799f16d0279be37a5a19bceb4bfa6437f94cb425ecd53b7ddcee3b6edaf3906af864d1db7f3d99c5c9e10b368d73b38a808c9be7d702bbbe5f4b3e5e6e4ad3613f2063d060e112645e9834ac62e7b31979fa9ee60d96a7703b50c34930bda2067191b82383cfe12e5a96b43665a6d2ea9a107c8f44d60e2784da24359d61ebbe8ec1e5008324e48ffcece8b0073e670319def583786285fb2068dfb03365dbc3d6bc859e51b0cb5e3395eab55c93fc3a9262b9201efd67ce355fd28450283ab0b83ae1690c95c731d2b3bc0af3e300b7895820ccbb4f91dfc54473645e0ec784dcf29ab23945570ff82d6051d3703efb3f32a042be1aa485cc2513e6467c6ba344f8d33a0958dc59c3e5cd73980f2149f2ab9233c444f4c44c5525856db70e5c82cbc03dea2116072bfcc16aa630d0537bc8b88ab9ff91836e6d5d376ce46c6139fec85f7a2f8b14748df90c50c3d40a1783ba5c4c4aaef93769f8c9ea91cfaedfed397a45d344cd57a57ad3a7ae97c419911430e355891338b6e13b0ac6ca22995d66d8a2886a6d22a0eb58082c92d59de62d6266d22962d8714f858dbf44eee50cecba63b364df5c07a60d14eef4446789e94aaa1ad15ab9ea20f2debec5ebac5a63248a19b38b4d387e87b803bf09887a482bed70e29986d79471b1e1900b734993223901510dd6e87acf395e0924dfbaec66c64b6161ceaf45065062719e0f0acc8b2ffee0ca2a0e3490e3dba611f1675a0b979f6693ee5e2baefe6812f184966e1224fd804b889018716eff376d7189c6e881ef1f9b8a3c41a2704ce6071c3472b8375eda6e0d2967a3ac0fe067e8d7822509e50ff9f37757205d264a85d6b3767233704ae221513087c6bc19274c49d748fb88a050fb34f167344110181c35f07d90a640f1e1c36390bdccda6a87612d03c4a224631b946091ae2308eadad324f384503cf3ea111f3406a735436b6d640ebdf1b69b063756dd758f9019df1568bac4eaccac804c490086868dbcdca1e7258cb5cfa1de1e8614147c6b0dbe3b15910c3b787be2843485196e777a344fb2e931fd6f74d5ab376c8991a3e4430540de8314764e18ba30f26b6f0f27c3deb30c2b399fac8e54cb1ab72c7c3fa259e3104666013a2256722bd35f588c354e5f2414a2fdebd020fee71b1115b74ee5b8564dbb93ec6a121f16700d645557265a05f97a1f501dc15271cd011127a2188eb5ef5ecb3065e8e37b0e2202b73d6ae80a23eda954b7e0adc7605f93cce1fc19b53d89ea834cae352d83de5ccd86e301773c5afe6b4739f633223e245d88a0a1bbb6b59781f957b87b72898588c2489a1a1424a42e2ab7193a70c7817f479b38eb6f114e1756350bf3759720c18fe727ec17b94542b95559fba101a3966f05c176d362b6ca86c09ca0e37c96353d639896c0e919ae3c942777e405639a807d53d6420b79ab5f626f7c8ad25107676e689df432ffca901b628fe4fe9323c317363f3904ac7ede14f01d34687c3de11d4238a24eec855d61c65d52fe5f7dc255bcc6b7bd5298c17fdd59191eff67016764430c51086244af2b8b0090ea1a1a5c86866d8614d3ef15b98a4de3a1aeee5b19d7d6d93196b98430613e024ead4056dcf965d1c0774c53e615c0395446fbb4095b8faf850298bf1634cc7dceabf4b2d8a2ebf0b12073a1c5d33856984cef521d21e5ecb21df2aaeb56477d05e9a003751dbee92537bd09c38aa695311f8cb55929ab0689b1017b7dd6af86f5cfd06fcf6412f0f3dc76d982289b785dfa08cf559a55c1c3582826a8a9e7a876e15cc747a945b5d29387a7d5648104d916a48200e8efb6d3c703a499cefbe664d5650be8a1ef95e8b5f5ce364e5e6757fdbc6501f7a5fb5e460f1f686006a104ec69bf23bf64238deddf9b85131f204c2ce2ed35c8343411afed045c031a1813b8dd866a11c172157a089568b41b76f49e98eb84301b2cbcb0b687017affdf2800b74325135c1b4dd317c5358ea0d20059e3b32edba233ed72ee00e9abe12d2854455c32117ec0139e7df7d587ffefdeee9e903fed9f397af9f5e3e3fbf7f7a7e7df9f3f5f6f2e5c7974f9f7efef5a75bbd7dfbf2f1f3e7e7f58ffef8f6f1a797e7f74f7fad2f7efeedf7af5f7e7bfde1f5eb2f2fbf7e7b7eff743e62cfaf5f5f3f7efecf5fbfc337fafbdd3f000000ffff03000bd36c77e4060200" ], + "rawHeaders": { + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-Request-ID", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9094dd6339928425-YVR", + "connection": "close", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Tue, 28 Jan 2025 23:46:57 GMT", + "openai-model": "text-embedding-3-small", + "openai-organization": "elastic-observability", + "openai-processing-ms": "308", + "openai-version": "2020-10-01", + "server": "cloudflare", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "transfer-encoding": "chunked", + "via": "envoy-router-5bd7456d89-pbxsn", + "x-content-type-options": "nosniff", + "x-envoy-upstream-service-time": "104", + "x-ratelimit-limit-requests": "3000", + "x-ratelimit-limit-tokens": "1000000", + "x-ratelimit-remaining-requests": "2999", + "x-ratelimit-remaining-tokens": "999992", + "x-ratelimit-reset-requests": "20ms", + "x-ratelimit-reset-tokens": "0s", + "x-request-id": "req_bb76ac477f663b03a1ec31884222a2fe" + }, "responseIsBinary": false } ] \ No newline at end of file diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-bad-iterate.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-bad-iterate.json index 6061fec5..5aedf866 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-bad-iterate.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-bad-iterate.json @@ -14,51 +14,30 @@ "stream": true }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-AfbMYrlVH9d0cIYpMN9fAgolnEEKQ\",\"object\":\"chat.completion.chunk\",\"created\":1734478434,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMYrlVH9d0cIYpMN9fAgolnEEKQ\",\"object\":\"chat.completion.chunk\",\"created\":1734478434,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Atlantic\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMYrlVH9d0cIYpMN9fAgolnEEKQ\",\"object\":\"chat.completion.chunk\",\"created\":1734478434,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMYrlVH9d0cIYpMN9fAgolnEEKQ\",\"object\":\"chat.completion.chunk\",\"created\":1734478434,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMYrlVH9d0cIYpMN9fAgolnEEKQ\",\"object\":\"chat.completion.chunk\",\"created\":1734478434,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}]}\n\ndata: [DONE]\n\n", - "rawHeaders": [ - "Date", - "Tue, 17 Dec 2024 23:33:54 GMT", - "Content-Type", - "text/event-stream; charset=utf-8", - "Transfer-Encoding", - "chunked", - "Connection", - "keep-alive", - "access-control-expose-headers", - "X-Request-ID", - "openai-organization", - "user-t27sfkqnaatdbowu2i7ij4dc", - "openai-processing-ms", - "311", - "openai-version", - "2020-10-01", - "x-ratelimit-limit-requests", - "10000", - "x-ratelimit-limit-tokens", - "200000", - "x-ratelimit-remaining-requests", - "9995", - "x-ratelimit-remaining-tokens", - "199967", - "x-ratelimit-reset-requests", - "40.286s", - "x-ratelimit-reset-tokens", - "9ms", - "x-request-id", - "req_03f2ffc680375331bea9b5f8894d7f7e", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status", - "DYNAMIC", - "X-Content-Type-Options", - "nosniff", - "Server", - "cloudflare", - "CF-RAY", - "8f3ab8832a2afce7-SIN", - "alt-svc", - "h3=\":443\"; ma=86400" - ], + "response": "data: {\"id\":\"chatcmpl-Aupa9mmShOUxTnvGLDSonNJoaRmeX\",\"object\":\"chat.completion.chunk\",\"created\":1738108013,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-Aupa9mmShOUxTnvGLDSonNJoaRmeX\",\"object\":\"chat.completion.chunk\",\"created\":1738108013,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"South\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-Aupa9mmShOUxTnvGLDSonNJoaRmeX\",\"object\":\"chat.completion.chunk\",\"created\":1738108013,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Atlantic\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-Aupa9mmShOUxTnvGLDSonNJoaRmeX\",\"object\":\"chat.completion.chunk\",\"created\":1738108013,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-Aupa9mmShOUxTnvGLDSonNJoaRmeX\",\"object\":\"chat.completion.chunk\",\"created\":1738108013,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-Aupa9mmShOUxTnvGLDSonNJoaRmeX\",\"object\":\"chat.completion.chunk\",\"created\":1738108013,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}]}\n\ndata: [DONE]\n\n", + "rawHeaders": { + "access-control-expose-headers": "X-Request-ID", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9094dd4add7148ed-YVR", + "connection": "close", + "content-type": "text/event-stream; charset=utf-8", + "date": "Tue, 28 Jan 2025 23:46:53 GMT", + "openai-organization": "elastic-observability", + "openai-processing-ms": "246", + "openai-version": "2020-10-01", + "server": "cloudflare", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "transfer-encoding": "chunked", + "x-content-type-options": "nosniff", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "200000", + "x-ratelimit-remaining-requests": "9995", + "x-ratelimit-remaining-tokens": "199967", + "x-ratelimit-reset-requests": "40.776s", + "x-ratelimit-reset-tokens": "9ms", + "x-request-id": "req_abecca361441dead70d1a2cfb2391b16" + }, "responseIsBinary": false } ] \ No newline at end of file diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-chat-completion.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-chat-completion.json index a390eb87..b70a1e17 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-chat-completion.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-chat-completion.json @@ -14,51 +14,30 @@ "stream": true }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"South\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Atlantic\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}]}\n\ndata: [DONE]\n\n", - "rawHeaders": [ - "Date", - "Tue, 17 Dec 2024 23:33:52 GMT", - "Content-Type", - "text/event-stream; charset=utf-8", - "Transfer-Encoding", - "chunked", - "Connection", - "keep-alive", - "access-control-expose-headers", - "X-Request-ID", - "openai-organization", - "user-t27sfkqnaatdbowu2i7ij4dc", - "openai-processing-ms", - "253", - "openai-version", - "2020-10-01", - "x-ratelimit-limit-requests", - "10000", - "x-ratelimit-limit-tokens", - "200000", - "x-ratelimit-remaining-requests", - "9998", - "x-ratelimit-remaining-tokens", - "199967", - "x-ratelimit-reset-requests", - "16.548s", - "x-ratelimit-reset-tokens", - "9ms", - "x-request-id", - "req_7206a47430a09ff739ee61c796f56d3a", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status", - "DYNAMIC", - "X-Content-Type-Options", - "nosniff", - "Server", - "cloudflare", - "CF-RAY", - "8f3ab8758a6ffcec-SIN", - "alt-svc", - "h3=\":443\"; ma=86400" - ], + "response": "data: {\"id\":\"chatcmpl-Aupa7af1SkrkThXa5ZLNKFvzyDiPx\",\"object\":\"chat.completion.chunk\",\"created\":1738108011,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-Aupa7af1SkrkThXa5ZLNKFvzyDiPx\",\"object\":\"chat.completion.chunk\",\"created\":1738108011,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"South\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-Aupa7af1SkrkThXa5ZLNKFvzyDiPx\",\"object\":\"chat.completion.chunk\",\"created\":1738108011,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Atlantic\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-Aupa7af1SkrkThXa5ZLNKFvzyDiPx\",\"object\":\"chat.completion.chunk\",\"created\":1738108011,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-Aupa7af1SkrkThXa5ZLNKFvzyDiPx\",\"object\":\"chat.completion.chunk\",\"created\":1738108011,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-Aupa7af1SkrkThXa5ZLNKFvzyDiPx\",\"object\":\"chat.completion.chunk\",\"created\":1738108011,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}]}\n\ndata: [DONE]\n\n", + "rawHeaders": { + "access-control-expose-headers": "X-Request-ID", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9094dd3feaae8405-YVR", + "connection": "close", + "content-type": "text/event-stream; charset=utf-8", + "date": "Tue, 28 Jan 2025 23:46:51 GMT", + "openai-organization": "elastic-observability", + "openai-processing-ms": "161", + "openai-version": "2020-10-01", + "server": "cloudflare", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "transfer-encoding": "chunked", + "x-content-type-options": "nosniff", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "200000", + "x-ratelimit-remaining-requests": "9998", + "x-ratelimit-remaining-tokens": "199967", + "x-ratelimit-reset-requests": "16.609s", + "x-ratelimit-reset-tokens": "9ms", + "x-request-id": "req_06c565c4761aaf9ca96495f00236d763" + }, "responseIsBinary": false } ] \ No newline at end of file diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-parallel-tool-calls.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-parallel-tool-calls.json index 726f85fb..39833bcb 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-parallel-tool-calls.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-parallel-tool-calls.json @@ -42,51 +42,30 @@ ] }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"id\":\"call_c70DUNhsnSAQ0y6d8OkyHQeg\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"lo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"catio\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"n\\\": \\\"N\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ew Y\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ork\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"id\":\"call_5XlUHHFmQpDB0GUeNHNsNYYa\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"{\\\"lo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"catio\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"n\\\": \\\"L\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"ondo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"n\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"tool_calls\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[],\"usage\":{\"prompt_tokens\":56,\"completion_tokens\":45,\"total_tokens\":101,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", - "rawHeaders": [ - "Date", - "Tue, 17 Dec 2024 23:33:58 GMT", - "Content-Type", - "text/event-stream; charset=utf-8", - "Transfer-Encoding", - "chunked", - "Connection", - "keep-alive", - "access-control-expose-headers", - "X-Request-ID", - "openai-organization", - "user-t27sfkqnaatdbowu2i7ij4dc", - "openai-processing-ms", - "1408", - "openai-version", - "2020-10-01", - "x-ratelimit-limit-requests", - "10000", - "x-ratelimit-limit-tokens", - "200000", - "x-ratelimit-remaining-requests", - "9992", - "x-ratelimit-remaining-tokens", - "199957", - "x-ratelimit-reset-requests", - "1m3.378s", - "x-ratelimit-reset-tokens", - "12ms", - "x-request-id", - "req_03974b7c49c134a0a1fd55fa1fb63e7d", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status", - "DYNAMIC", - "X-Content-Type-Options", - "nosniff", - "Server", - "cloudflare", - "CF-RAY", - "8f3ab894b8e2f92a-SIN", - "alt-svc", - "h3=\":443\"; ma=86400" - ], + "response": "data: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"id\":\"call_pPFjIPIb7W7HkxCqGdpTIzVy\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"lo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"catio\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"n\\\": \\\"N\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ew Y\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ork\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"id\":\"call_pORZbhSG8VtXET83iaotru1X\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"{\\\"lo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"catio\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"n\\\": \\\"L\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"ondo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"n\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"tool_calls\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBx10BqaJquUN3Vqj27CH52Sqg\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[],\"usage\":{\"prompt_tokens\":56,\"completion_tokens\":46,\"total_tokens\":102,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", + "rawHeaders": { + "access-control-expose-headers": "X-Request-ID", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9094dd5a8dd38450-YVR", + "connection": "close", + "content-type": "text/event-stream; charset=utf-8", + "date": "Tue, 28 Jan 2025 23:46:56 GMT", + "openai-organization": "elastic-observability", + "openai-processing-ms": "922", + "openai-version": "2020-10-01", + "server": "cloudflare", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "transfer-encoding": "chunked", + "x-content-type-options": "nosniff", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "200000", + "x-ratelimit-remaining-requests": "9992", + "x-ratelimit-remaining-tokens": "199957", + "x-ratelimit-reset-requests": "1m4.163s", + "x-ratelimit-reset-tokens": "12ms", + "x-request-id": "req_7a23571960c18acedffeb1db2097b902" + }, "responseIsBinary": false } ] \ No newline at end of file diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-tool-calls.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-tool-calls.json index 9d5bc3dc..4a4c4866 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-tool-calls.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-tool-calls.json @@ -51,51 +51,30 @@ ] }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":null,\"tool_calls\":[{\"index\":0,\"id\":\"call_ltrRGOHzmLMWSIRAZImscFEy\",\"type\":\"function\",\"function\":{\"name\":\"get_delivery_date\",\"arguments\":\"\"}}],\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"order\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_id\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"order\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"123\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"45\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"tool_calls\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[],\"usage\":{\"prompt_tokens\":140,\"completion_tokens\":19,\"total_tokens\":159,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", - "rawHeaders": [ - "Date", - "Tue, 17 Dec 2024 23:33:56 GMT", - "Content-Type", - "text/event-stream; charset=utf-8", - "Transfer-Encoding", - "chunked", - "Connection", - "keep-alive", - "access-control-expose-headers", - "X-Request-ID", - "openai-organization", - "user-t27sfkqnaatdbowu2i7ij4dc", - "openai-processing-ms", - "336", - "openai-version", - "2020-10-01", - "x-ratelimit-limit-requests", - "10000", - "x-ratelimit-limit-tokens", - "200000", - "x-ratelimit-remaining-requests", - "9993", - "x-ratelimit-remaining-tokens", - "199921", - "x-ratelimit-reset-requests", - "55.703s", - "x-ratelimit-reset-tokens", - "23ms", - "x-request-id", - "req_715d3ecc0be2edb77b3a38e730e4c2db", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status", - "DYNAMIC", - "X-Content-Type-Options", - "nosniff", - "Server", - "cloudflare", - "CF-RAY", - "8f3ab88ede73f876-SIN", - "alt-svc", - "h3=\":443\"; ma=86400" - ], + "response": "data: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":null,\"tool_calls\":[{\"index\":0,\"id\":\"call_5CHeMESVhk3E23kwKzTFuGlZ\",\"type\":\"function\",\"function\":{\"name\":\"get_delivery_date\",\"arguments\":\"\"}}],\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"order\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_id\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"order\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"123\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"45\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"tool_calls\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AupaBny5TtBqCkjiH9q77Czg4vOPt\",\"object\":\"chat.completion.chunk\",\"created\":1738108015,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[],\"usage\":{\"prompt_tokens\":140,\"completion_tokens\":20,\"total_tokens\":160,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", + "rawHeaders": { + "access-control-expose-headers": "X-Request-ID", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9094dd558a7b8435-YVR", + "connection": "close", + "content-type": "text/event-stream; charset=utf-8", + "date": "Tue, 28 Jan 2025 23:46:55 GMT", + "openai-organization": "elastic-observability", + "openai-processing-ms": "271", + "openai-version": "2020-10-01", + "server": "cloudflare", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "transfer-encoding": "chunked", + "x-content-type-options": "nosniff", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "200000", + "x-ratelimit-remaining-requests": "9993", + "x-ratelimit-remaining-tokens": "199921", + "x-ratelimit-reset-requests": "56.294s", + "x-ratelimit-reset-tokens": "23ms", + "x-request-id": "req_57ae389619a45eff61de39e4071acdeb" + }, "responseIsBinary": false } ] \ No newline at end of file diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-include_usage.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-include_usage.json index 1a62d73f..9cca11e5 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-include_usage.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-include_usage.json @@ -17,51 +17,30 @@ } }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"South\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Atlantic\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[],\"usage\":{\"prompt_tokens\":22,\"completion_tokens\":4,\"total_tokens\":26,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", - "rawHeaders": [ - "Date", - "Tue, 17 Dec 2024 23:33:52 GMT", - "Content-Type", - "text/event-stream; charset=utf-8", - "Transfer-Encoding", - "chunked", - "Connection", - "keep-alive", - "access-control-expose-headers", - "X-Request-ID", - "openai-organization", - "user-t27sfkqnaatdbowu2i7ij4dc", - "openai-processing-ms", - "123", - "openai-version", - "2020-10-01", - "x-ratelimit-limit-requests", - "10000", - "x-ratelimit-limit-tokens", - "200000", - "x-ratelimit-remaining-requests", - "9997", - "x-ratelimit-remaining-tokens", - "199967", - "x-ratelimit-reset-requests", - "24.401s", - "x-ratelimit-reset-tokens", - "9ms", - "x-request-id", - "req_2f0869824d2393534d2bf2f6c21e18be", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status", - "DYNAMIC", - "X-Content-Type-Options", - "nosniff", - "Server", - "cloudflare", - "CF-RAY", - "8f3ab87a6d09f8d4-SIN", - "alt-svc", - "h3=\":443\"; ma=86400" - ], + "response": "data: {\"id\":\"chatcmpl-Aupa8NcA6BeYgkxTnJPVDULyIHTY0\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-Aupa8NcA6BeYgkxTnJPVDULyIHTY0\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Atlantic\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-Aupa8NcA6BeYgkxTnJPVDULyIHTY0\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-Aupa8NcA6BeYgkxTnJPVDULyIHTY0\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-Aupa8NcA6BeYgkxTnJPVDULyIHTY0\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-Aupa8NcA6BeYgkxTnJPVDULyIHTY0\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_bd83329f63\",\"choices\":[],\"usage\":{\"prompt_tokens\":22,\"completion_tokens\":4,\"total_tokens\":26,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", + "rawHeaders": { + "access-control-expose-headers": "X-Request-ID", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9094dd435984840b-YVR", + "connection": "close", + "content-type": "text/event-stream; charset=utf-8", + "date": "Tue, 28 Jan 2025 23:46:52 GMT", + "openai-organization": "elastic-observability", + "openai-processing-ms": "123", + "openai-version": "2020-10-01", + "server": "cloudflare", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "transfer-encoding": "chunked", + "x-content-type-options": "nosniff", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "200000", + "x-ratelimit-remaining-requests": "9997", + "x-ratelimit-remaining-tokens": "199968", + "x-ratelimit-reset-requests": "24.653s", + "x-ratelimit-reset-tokens": "9ms", + "x-request-id": "req_98d54e53095f410cc20ce1a3159fb8d6" + }, "responseIsBinary": false } ] \ No newline at end of file diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-tee.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-tee.json index d75cadc6..34f9f905 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-tee.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-tee.json @@ -17,51 +17,30 @@ } }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Atlantic\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[],\"usage\":{\"prompt_tokens\":22,\"completion_tokens\":3,\"total_tokens\":25,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", - "rawHeaders": [ - "Date", - "Tue, 17 Dec 2024 23:33:53 GMT", - "Content-Type", - "text/event-stream; charset=utf-8", - "Transfer-Encoding", - "chunked", - "Connection", - "keep-alive", - "access-control-expose-headers", - "X-Request-ID", - "openai-organization", - "user-t27sfkqnaatdbowu2i7ij4dc", - "openai-processing-ms", - "210", - "openai-version", - "2020-10-01", - "x-ratelimit-limit-requests", - "10000", - "x-ratelimit-limit-tokens", - "200000", - "x-ratelimit-remaining-requests", - "9996", - "x-ratelimit-remaining-tokens", - "199967", - "x-ratelimit-reset-requests", - "32.384s", - "x-ratelimit-reset-tokens", - "9ms", - "x-request-id", - "req_7f78b137bb44bdaac4533b2098d4a01d", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status", - "DYNAMIC", - "X-Content-Type-Options", - "nosniff", - "Server", - "cloudflare", - "CF-RAY", - "8f3ab87e8aeccdf1-SIN", - "alt-svc", - "h3=\":443\"; ma=86400" - ], + "response": "data: {\"id\":\"chatcmpl-Aupa8Ab27nJk1HT7KG6sBYPzcfYZz\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-Aupa8Ab27nJk1HT7KG6sBYPzcfYZz\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Atlantic\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-Aupa8Ab27nJk1HT7KG6sBYPzcfYZz\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-Aupa8Ab27nJk1HT7KG6sBYPzcfYZz\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-Aupa8Ab27nJk1HT7KG6sBYPzcfYZz\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-Aupa8Ab27nJk1HT7KG6sBYPzcfYZz\",\"object\":\"chat.completion.chunk\",\"created\":1738108012,\"model\":\"gpt-4o-mini-2024-07-18\",\"service_tier\":\"default\",\"system_fingerprint\":\"fp_72ed7ab54c\",\"choices\":[],\"usage\":{\"prompt_tokens\":22,\"completion_tokens\":4,\"total_tokens\":26,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", + "rawHeaders": { + "access-control-expose-headers": "X-Request-ID", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9094dd46fe6c4945-YVR", + "connection": "close", + "content-type": "text/event-stream; charset=utf-8", + "date": "Tue, 28 Jan 2025 23:46:52 GMT", + "openai-organization": "elastic-observability", + "openai-processing-ms": "201", + "openai-version": "2020-10-01", + "server": "cloudflare", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "transfer-encoding": "chunked", + "x-content-type-options": "nosniff", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "200000", + "x-ratelimit-remaining-requests": "9996", + "x-ratelimit-remaining-tokens": "199967", + "x-ratelimit-reset-requests": "32.72s", + "x-ratelimit-reset-tokens": "9ms", + "x-request-id": "req_366fd97391fc9fe6885af6482662bbf9" + }, "responseIsBinary": false } ] \ No newline at end of file diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/tool-calls.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/tool-calls.json index d010b82d..63f95cd1 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/tool-calls.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/tool-calls.json @@ -48,56 +48,32 @@ }, "status": 200, "response": [ - "1f8b0800000000000003000000ffff", - "8c534d8fd33010bde75758736e50d2a6db92dbaa4205a4150804d24291e5d893d4bb8eedb59d65abaaff1d256d93b42c123944f6bc79f3f166bc8f0801292027c0b72cf0daaaf8b62ceeee9335be5fdfbe7bfc345dad907d7ec2954d93bba7394c5a86291e908733eb0d37b55518a4d147983b6401dba8e96296658b6536cb3aa03602554bab6c883313d752cb789a4cb33859c4e9f2c4de1ac9d1434e7e468410b2effe6d9d5ae00be424999c2d357acf2a84bc7722049c51ad0598f7d207a6034c06901b1d50b7a5eb46a911108c519433a586c4c76f3f3a0f6231a5a82c7e2fa71f8aafdb6ff72fcf5fd68b8f37e6017f7cc751be63e89ded0a2a1bcd7b9146786fcfaf9211029ad51db7c240052af98c6e47050bd7490801e6aaa6461dda0660bf01e3043a2ac506f2f3259dceb2f9060e70c13d44af9d7f8dc47158369ea9936a27fba11f83329575a6f057aa4229b5f45bea90f9aebbb1c8d1395b97079a8b398275a6b68106f388ba0d9b66a7a1c3b06b23f4ed090c263035b2cfcfc0453c2a3030d90dbadf2dcef816c5401d768c35429a11108d7affbb9ad7621ffb97bafa9ff003c039da80825a8742f2cb8e073787ed53fc975baf725730f89d0f58d352ea0a9d75b27b08505a7a53f234c134c102a243f4070000ffff", - "0300604a8bf316040000" - ], - "rawHeaders": [ - "Date", - "Tue, 17 Dec 2024 23:33:55 GMT", - "Content-Type", - "application/json", - "Transfer-Encoding", - "chunked", - "Connection", - "keep-alive", - "access-control-expose-headers", - "X-Request-ID", - "openai-organization", - "user-t27sfkqnaatdbowu2i7ij4dc", - "openai-processing-ms", - "496", - "openai-version", - "2020-10-01", - "x-ratelimit-limit-requests", - "10000", - "x-ratelimit-limit-tokens", - "200000", - "x-ratelimit-remaining-requests", - "9994", - "x-ratelimit-remaining-tokens", - "199921", - "x-ratelimit-reset-requests", - "48.067s", - "x-ratelimit-reset-tokens", - "23ms", - "x-request-id", - "req_83d0ab89905ee01cbd365b3e704f8309", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status", - "DYNAMIC", - "X-Content-Type-Options", - "nosniff", - "Server", - "cloudflare", - "CF-RAY", - "8f3ab8888b1bfd83-SIN", - "Content-Encoding", - "gzip", - "alt-svc", - "h3=\":443\"; ma=86400" + "1f8b0800000000000003000000ffff8c53cb6edb3010bceb2b883d5b85a4c8b5a15b9006c8a54181162dd23a2068722533a14886a48c3886ffbd906c3deca6407410c81dceecee2cb98f080129a020c0372cf0daaaf8bab1ec9a7d7b4e7f3e3cccc3dd8fafdb97b757bebcff62bedfdec3ac6598f513f2d0b33e71535b85411a7d84b94316b0554d1757cb34592669de01b511a85a5a65439c9bb8965ac65992e571b288d3e589bd3192a38782fc89082164dffddb3ab5c057284832eb23357acf2a846238440838a3da0830efa50f4c07988d20373aa06e4bd78d52132018a328674a8d898fdf7eb21ecd624ad1a726bb79792b85439536d5f696fd4aee02fb9d4ff21da577b62ba86c341f4c9ae043bcb8484608685677dc0a0315a8e416dd8e0a16f042841060ae6a6ad4a16d00f62b304ea0a352aca0e837697695cf57708033ee217a6ffd3831c761d978a64eae9de287610cca54d699b5bf70154aa9a5df5087cc77dd4d4d8efa6c5d1e68cee608d699da061acc33ea5636cd4f4387f1ae8d68d683c104a626accf3d70a647050626bb410f778b33be413152c73bc61a21cd048826bdff5bcd7bdac7fea5ae3e223f029ca30d28a87528243fef783ce6b07d8aff3b36b8dc150c1edd5672a441a26be721b0648d3a3e10f03b1fb0a6a5d4153aeb64f74aa0b47491a158b0f53ce7101da2bf000000ffff0300b548e3c233040000" ], + "rawHeaders": { + "access-control-expose-headers": "X-Request-ID", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9094dd4f3e9d7101-YVR", + "connection": "close", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Tue, 28 Jan 2025 23:46:54 GMT", + "openai-organization": "elastic-observability", + "openai-processing-ms": "597", + "openai-version": "2020-10-01", + "server": "cloudflare", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "transfer-encoding": "chunked", + "x-content-type-options": "nosniff", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "200000", + "x-ratelimit-remaining-requests": "9994", + "x-ratelimit-remaining-tokens": "199921", + "x-ratelimit-reset-requests": "48.679s", + "x-ratelimit-reset-tokens": "23ms", + "x-request-id": "req_4cc2b9b099e130556b960b416f82e74b" + }, "responseIsBinary": false } ] \ No newline at end of file diff --git a/packages/instrumentation-openai/test/testutils.js b/packages/instrumentation-openai/test/testutils.js index 5d90048d..86054699 100644 --- a/packages/instrumentation-openai/test/testutils.js +++ b/packages/instrumentation-openai/test/testutils.js @@ -645,11 +645,11 @@ async function runFnWithNockBack(fn, recordingName, nockBackMode) { // and that we don't need for testing. const sanitizeRecordedNockScopes = scopes => { for (const scope of scopes) { - for (let i = 0; i < scope.rawHeaders.length; i += 2) { - if (scope.rawHeaders[i].toLowerCase() === 'set-cookie') { - scope.rawHeaders.splice(i, 2); + Object.keys(scope.rawHeaders).forEach(k => { + if (k.toLowerCase() === 'set-cookie') { + delete scope.rawHeaders[k]; } - } + }); } return scopes; };