From a922eded9b78a2cf70ff85befbe035f536342854 Mon Sep 17 00:00:00 2001 From: Laurent Broudoux Date: Tue, 21 Nov 2023 11:30:44 +0100 Subject: [PATCH] chore: Completing documentation for nest-order-service Signed-off-by: Laurent Broudoux --- shift-left-demo/nest-order-service/README.md | 422 ++++++++++++++++-- .../assets/order-service-architecture.png | Bin 0 -> 91067 bytes .../assets/order-service-ecosystem.png | Bin 0 -> 70928 bytes .../microcks-docker-compose.yml | 5 +- .../src/order/entities/order-status.ts | 8 +- .../src/pastry/pastry.module.ts | 2 +- .../src/pastry/pastry.service.spec.ts | 4 +- .../test/orders.api.e2e-spec.ts | 4 +- .../test/orders.api.postman.e2e-spec.ts | 4 +- 9 files changed, 389 insertions(+), 60 deletions(-) create mode 100644 shift-left-demo/nest-order-service/assets/order-service-architecture.png create mode 100644 shift-left-demo/nest-order-service/assets/order-service-ecosystem.png diff --git a/shift-left-demo/nest-order-service/README.md b/shift-left-demo/nest-order-service/README.md index 00a13b1..3199145 100644 --- a/shift-left-demo/nest-order-service/README.md +++ b/shift-left-demo/nest-order-service/README.md @@ -1,73 +1,403 @@ +# Shift-left demo - NestJS Order Service + +This application is a sample on how to integrate Microcks via Testcontainers within your development inner-loop. + +[NestJS](https://nestjs.com/) is a progressive Node.js framework for building efficient and scalable server-side applications. +

- Nest Logo + Nest Logo

-[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 -[circleci-url]: https://circleci.com/gh/nestjs/nest - -

A progressive Node.js framework for building efficient and scalable server-side applications.

-

-NPM Version -Package License -NPM Downloads -CircleCI -Coverage -Discord -Backers on Open Collective -Sponsors on Open Collective - - Support us - -

- +## Application introduction + +This fictional application we're working on is a typical `Order Service` that can allow online, physical stores, or even +partners to place orders for our fresh-backed pastries! For that, the `Order Service` is exposing a REST API to its consumers +but also relies on an existing API we have [introduced in a previous post](https://medium.com/@lbroudoux/different-levels-of-api-contract-testing-with-microcks-ccc0847f8c97) 😉 -## Description +![Order Service ecosystem](./assets/order-service-ecosystem.png) -[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. +The `Order Service` application has been designed around 3 main components that are directly mapped on Spring Boot components and classes: +* The `OrderController` (in package `src/order/order.controller.ts`) is responsible for exposing an `Order API` to the outer world. This API is specified using the `test/resources/order-service-openapi.yaml` OpenAPI specification, +* The `OrderService` (in package `src/order/order.service.ts`) is responsible for implementing the business logic around the creation of orders. Typically, it checks that the products are available before recording an order. Otherwise, order cannot be placed, +* The `PastryAPIClient` (in package `src/pastry/pastry.service.ts`) is responsible for calling the `Pastry API` in *Product Domain* and get details or list of pastries. + +![Order Service architecture](./assets/order-service-architecture.png) + +Of course, this is a very naive vision of a real-life system as such an application would certainly pull out much more +dependencies (like a `Payment Service`, a `Customer Service`, a `Shipping Service`, and much more) and offer more complex API. +However, this situation is complex enough to highlight the two problems we're addressing: +1) How to **efficiently set up a development environment** that depends on third-party API like the Pastry API? +You certainly want to avoid cloning this component repository, figuring out how to launch it and configure it accordingly. As a developer, developing your own mock of this service makes you also lose time and risk drifting from initial intent, +2) How to **efficiently validate the conformance** of the `Order API` against business expectations and OpenAPI contract? +Besides the core business logic, you might want to validate the network and protocol serialization layers as well as the respect of HTTP semantics. ## Installation -```bash +Once this repository cloned on your local machine, you have to start with fetching the required dependencies: + +```shell $ npm install ``` -## Running the app +## Development phase -```bash -# development +Let's imagine you start an interactive development/testing session, running your local server with: + +```shell $ npm run start +==== OUTPUT ==== +> nest-order-service@0.0.1 start +> nest start + +[Nest] 82448 - 21/11/2023 09:50:19 LOG [NestFactory] Starting Nest application... +[Nest] 82448 - 21/11/2023 09:50:19 LOG [InstanceLoader] ConfigHostModule dependencies initialized +7ms +[Nest] 82448 - 21/11/2023 09:50:19 LOG [InstanceLoader] AppModule dependencies initialized +0ms +[Nest] 82448 - 21/11/2023 09:50:19 LOG [InstanceLoader] ConfigModule dependencies initialized +0ms +[Nest] 82448 - 21/11/2023 09:50:19 LOG [InstanceLoader] PastryModule dependencies initialized +0ms +[Nest] 82448 - 21/11/2023 09:50:19 LOG [InstanceLoader] OrderModule dependencies initialized +0ms +[Nest] 82448 - 21/11/2023 09:50:19 LOG [RoutesResolver] AppController {/}: +6ms +[Nest] 82448 - 21/11/2023 09:50:19 LOG [RouterExplorer] Mapped {/, GET} route +1ms +[Nest] 82448 - 21/11/2023 09:50:19 LOG [RoutesResolver] OrderController {/orders}: +0ms +[Nest] 82448 - 21/11/2023 09:50:19 LOG [RouterExplorer] Mapped {/orders, POST} route +1ms +[Nest] 82448 - 21/11/2023 09:50:19 LOG [NestApplication] Nest application successfully started +1ms +``` + +You can start Microcks as a utility tool with this simple command `microcks.sh`. Microcks docker-compose file (`microcks-docker-compose.yml`) +has been configured to automatically import the `Order API` contract but also the `Pastry API` contracts. Both APIs are discovered on startup +and Microcks UI should be available on `http://localhost:9090` in your browser: + +```shell +$ ./microcks.sh +==== OUTPUT ==== +[+] Running 3/2 + ✔ Network nest-boot-order-service_default Created 0.0s + ✔ Container nest-order-service-microcks-1 Created 0.0s + ✔ Container nest-order-service-importer-1 Created 0.0s +Attaching to nest-order-service-importer-1, nest-order-service-microcks-1 +nest-order-service-microcks-1 | exec java -XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:+ExitOnOutOfMemoryError -cp . -jar /deployments/app.jar +nest-order-service-importer-1 | Got error when invoking Microcks client retrieving config: Get "http://microcks:8080/api/keycloak/config": dial tcp 172.29.0.2:8080: connect: connection refused +nest-order-service-importer-1 exited with code 1 +nest-order-service-importer-1 | Got error when invoking Microcks client retrieving config: Get "http://microcks:8080/api/keycloak/config": dial tcp 172.29.0.2:8080: connect: connection refused +nest-order-service-importer-1 exited with code 1 +nest-order-service-microcks-1 | +nest-order-service-microcks-1 | . ____ _ __ _ _ +nest-order-service-microcks-1 | /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ +nest-order-service-microcks-1 | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ +nest-order-service-microcks-1 | \\/ ___)| |_)| | | | | || (_| | ) ) ) ) +nest-order-service-microcks-1 | ' |____| .__|_| |_|_| |_\__, | / / / / +nest-order-service-microcks-1 | =========|_|==============|___/=/_/_/_/ +nest-order-service-microcks-1 | +nest-order-service-microcks-1 | :: Spring Boot :: (v3.1.1) +nest-order-service-microcks-1 | +nest-order-service-microcks-1 | +nest-order-service-microcks-1 | 08:56:15.437 INFO 1 --- [ main] i.g.microcks.MicrocksApplication : Starting MicrocksApplication using Java 17.0.9 with PID 1 (/deployments/app.jar started by ? in /deployments) +nest-order-service-microcks-1 | 08:56:15.439 DEBUG 1 --- [ main] i.g.microcks.MicrocksApplication : Running with Spring Boot v3.1.1, Spring v6.0.10 +nest-order-service-microcks-1 | 08:56:15.439 INFO 1 --- [ main] i.g.microcks.MicrocksApplication : The following 1 profile is active: "uber" +nest-order-service-importer-1 | Got error when invoking Microcks client retrieving config: Get "http://microcks:8080/api/keycloak/config": dial tcp 172.29.0.2:8080: connect: connection refused +nest-order-service-importer-1 exited with code 1 +nest-order-service-importer-1 | Got error when invoking Microcks client retrieving config: Get "http://microcks:8080/api/keycloak/config": dial tcp 172.29.0.2:8080: connect: connection refused +nest-order-service-importer-1 exited with code 1 +nest-order-service-microcks-1 | 08:56:16.718 INFO 1 --- [ main] i.g.microcks.config.WebConfiguration : Starting web application configuration, using profiles: [uber] +nest-order-service-microcks-1 | 08:56:16.719 INFO 1 --- [ main] i.g.microcks.config.WebConfiguration : Web application fully configured +nest-order-service-microcks-1 | 08:56:16.758 INFO 1 --- [ main] i.g.m.c.EmbeddedMongoConfiguration : Creating a new embedded Mongo Java Server with in-memory persistence +nest-order-service-microcks-1 | 08:56:16.874 INFO 1 --- [ main] de.bwaldvogel.mongo.MongoServer : started MongoServer(port: 35781, ssl: false) +nest-order-service-microcks-1 | 08:56:16.940 INFO 1 --- [ main] org.mongodb.driver.client : MongoClient with metadata {"driver": {"name": "mongo-java-driver|sync", "version": "4.9.1"}, "os": {"type": "Linux", "name": "Linux", "architecture": "aarch64", "version": "5.15.49-linuxkit-pr"}, "platform": "Java/Red Hat, Inc./17.0.9+9-LTS"} created with settings MongoClientSettings{readPreference=primary, writeConcern=WriteConcern{w=null, wTimeout=null ms, journal=null}, retryWrites=true, retryReads=true, readConcern=ReadConcern{level=null}, credential=null, streamFactoryFactory=null, commandListeners=[], codecRegistry=ProvidersCodecRegistry{codecProviders=[ValueCodecProvider{}, BsonValueCodecProvider{}, DBRefCodecProvider{}, DBObjectCodecProvider{}, DocumentCodecProvider{}, CollectionCodecProvider{}, IterableCodecProvider{}, MapCodecProvider{}, GeoJsonCodecProvider{}, GridFSFileCodecProvider{}, Jsr310CodecProvider{}, JsonObjectCodecProvider{}, BsonCodecProvider{}, EnumCodecProvider{}, com.mongodb.client.model.mql.ExpressionCodecProvider@4afd21c6, com.mongodb.Jep395RecordCodecProvider@4d0753c9]}, loggerSettings=LoggerSettings{maxDocumentLength=1000}, clusterSettings={hosts=[localhost:35781], srvServiceName=mongodb, mode=SINGLE, requiredClusterType=UNKNOWN, requiredReplicaSetName='null', serverSelector='null', clusterListeners='[]', serverSelectionTimeout='30000 ms', localThreshold='30000 ms'}, socketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=0, receiveBufferSize=0, sendBufferSize=0}, heartbeatSocketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=10000, receiveBufferSize=0, sendBufferSize=0}, connectionPoolSettings=ConnectionPoolSettings{maxSize=100, minSize=0, maxWaitTimeMS=120000, maxConnectionLifeTimeMS=0, maxConnectionIdleTimeMS=0, maintenanceInitialDelayMS=0, maintenanceFrequencyMS=60000, connectionPoolListeners=[], maxConnecting=2}, serverSettings=ServerSettings{heartbeatFrequencyMS=10000, minHeartbeatFrequencyMS=500, serverListeners='[]', serverMonitorListeners='[]'}, sslSettings=SslSettings{enabled=false, invalidHostNameAllowed=false, context=null}, applicationName='null', compressorList=[], uuidRepresentation=UNSPECIFIED, serverApi=null, autoEncryptionSettings=null, contextProvider=null} +nest-order-service-microcks-1 | 08:56:16.948 INFO 1 --- [er-worker1] d.b.m.wire.MongoWireProtocolHandler : client [id: 0xff8d5ff5, L:/127.0.0.1:35781 - R:/127.0.0.1:56706] connected +nest-order-service-microcks-1 | 08:56:16.948 INFO 1 --- [er-worker2] d.b.m.wire.MongoWireProtocolHandler : client [id: 0x4c3662c5, L:/127.0.0.1:35781 - R:/127.0.0.1:56704] connected +nest-order-service-microcks-1 | 08:56:16.998 INFO 1 --- [host:35781] org.mongodb.driver.cluster : Monitor thread successfully connected to server with description ServerDescription{address=localhost:35781, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=6, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=null, roundTripTimeNanos=58685042} +nest-order-service-microcks-1 | 08:56:17.226 INFO 1 --- [ main] i.g.m.config.AICopilotConfiguration : AICopilot is disabled +nest-order-service-importer-1 | Got error when invoking Microcks client retrieving config: Get "http://microcks:8080/api/keycloak/config": dial tcp 172.29.0.2:8080: connect: connection refused +nest-order-service-importer-1 exited with code 1 +nest-order-service-microcks-1 | 08:56:17.514 INFO 1 --- [ main] i.g.m.util.grpc.GrpcServerStarter : GRPC Server started on port 9090 +nest-order-service-microcks-1 | 08:56:17.581 INFO 1 --- [ main] i.g.m.config.SecurityConfiguration : Starting security configuration +nest-order-service-microcks-1 | 08:56:17.582 INFO 1 --- [ main] i.g.m.config.SecurityConfiguration : Keycloak is disabled, permitting all requests +nest-order-service-microcks-1 | 08:56:17.931 INFO 1 --- [ main] i.g.microcks.MicrocksApplication : Started MicrocksApplication in 2.682 seconds (process running for 3.201) +[...] +nest-order-service-importer-1 | Microcks has discovered 'Order Service API:0.1.0' +[...] +nest-order-service-importer-1 | Microcks has discovered 'API Pastries:0.0.1' +[...] +nest-order-service-importer-1 | Microcks has discovered 'API Pastries:0.0.1' +[...] +nest-order-service-importer-1 exited with code 0 +``` + +Because our `Order Service` application has been configured to talk to Microcks mocks (see the default settings in `src/pastry/pastry.module.ts`), +you should be able to directly call the Order API and invoke the whole chain made of the 3 components: + +```shell +$ curl -XPOST localhost:3000/orders -H 'Content-type: application/json' \ + -d '{"customerId": "lbroudoux", "productQuantities": [{"productName": "Millefeuille", "quantity": 1}], "totalPrice": 10.1}' +==== OUTPUT ==== +{"id":"dade7d85694","status":"CREATED","customerId":"lbroudoux","productQuantities":[{"productName":"Millefeuille","quantity":1}],"totalPrice":10.1} +``` + +## Unit Test phase + +In addition, Microcks can also be launched automatically within your unit tests using [Testcontainers](https://testcontainers.com/). +Microcks provides a [`microcks-testcontainers-node`](https://github.com/microcks/microcks-testcontainers-node) module you can integrate in Jest tests. +Check the `package.json` of this project to see how to declare dependencies. + +### Mock your dependencies + +In the case you're using Jest, the plumbing happens in the `beforeAll()` function where you start Microcks and import the artifacts you'll need in your tests to mock the `Pastry API` dependency: + +```typescript +beforeAll(async () => { + // Start container and load artifacts. + container = await new MicrocksContainer() + .withMainArtifacts([path.resolve(resourcesDir, 'apipastries-openapi.yml')]) + .withSecondaryArtifacts([path.resolve(resourcesDir, 'apipastries-postman-collection.json')]) + .start(); + + // Custom NestJS module init. + [...] +}); +``` + +Once the Microcks container is started, we then need to update the `pastries.baseurl` application property that is used by the `PastryService` component to know the endpoint of this external API. Here, we have to replace the one defined in the default module sources by a new URL directly provided by the Microcks container: + +```typescript +const module: TestingModule = await Test.createTestingModule({ + imports: [ConfigModule.forRoot({ + load: [() => ({ + 'pastries.baseurl': container.getRestMockEndpoint('API Pastries', '0.0.1') + })], + })], + providers: [PastryService], +}).compile(); +``` + +Finally, we can define our unit test method that allow checking that the `PastryService` (here via the `service` reference) is working as expected: + +```typescript +it('should retrieve pastries by size', async () => { + let pastries: Pastry[] = await service.getPastries('S'); + expect(pastries.length).toBe(1); +}); +``` + +Do not forget then to stop and tear down resources at the end of the tests: + +```typescript +afterAll(async () => { + // Now stop the container. + await container.stop(); +}); +``` + +### OpenAPI contract testing + +Remember the 2 problems we're trying to solve here? The 2nd one is about how to validate the conformance of the `Order API` we'll +expose to consumers. We certainly can write an integration test that uses [Supertest](https://github.com/ladjs/supertest) or other libraries +to invoke the exposed Http layer and validate each and every response with assertions like: + +```typescript +describe('GET /users', function() { + it('responds with json', async function() { + const response = await request(app) + .get('/users') + .set('Accept', 'application/json') + expect(response.headers["Content-Type"]).toMatch(/json/); + expect(response.status).toEqual(200); + expect(response.body.email).toEqual('foo@bar.com'); + }); +}); +``` + +This certainly works but presents 2 problems in my humble opinion: +* It's a lot of code to write! And it's apply to each API interaction because for each interaction it's probably a good idea to +check the structure of same objects in the message. This lead to a fair amount of code! +* The code you write here is actually a language specific translation of the OpenAPI specification for the `Order API`: so the same +"rules" get duplicated. Whether you edit the code or the OpenAPI spec first, high are the chances you get some drifts between your test +suite and the specification you will provide to consumers! -# watch mode -$ npm run start:dev +Microcks Testcontainer integration provides another approach by letting you reuse the OpenAPI specification directly in your test suite, +without having to write assertions and validation of messages for API interaction. -# production mode -$ npm run start:prod +In the case you're using Jest, the plumbing happens in the `beforeAll()` function where you start Microcks and import the artifacts you'll need in your tests to mock the `Pastry API` dependency but also the `Order Service` OpenAPI specification so that Microcks know your test suite "rules". The little difference here is that this container must have access to the host you're running your unit/integration test on: + +```typescript +beforeAll(async () => { + // Find a free port in a range and expose this port to testcontainers. + appPort = (await findFreePorts(1, {startPort: 3000, endPort: 3100}))[0]; + await TestContainers.exposeHostPorts(appPort); + + // Start container and load artifacts. + container = await new MicrocksContainer() + .withMainArtifacts([ + path.resolve(resourcesDir, 'order-service-openapi.yml'), + path.resolve(resourcesDir, 'apipastries-openapi.yml') + ]) + .withSecondaryArtifacts([path.resolve(resourcesDir, 'apipastries-postman-collection.json')]) + .start(); + + // Start our application configuring it to resolve Microcks mocks for pastries. + const moduleFixture: TestingModule = await Test.createTestingModule({ + imports: [ + ConfigModule.forRoot({ + load: [() => ({ + 'pastries.baseurl': container.getRestMockEndpoint('API Pastries', '0.0.1') + })], + }), AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.listen(appPort); +}); +``` + +> You may check the `test/orders.api.e2e-spec.ts` file for full source code. + +Then, we can define our unit test method that allow checking that the `OrderController` (here via the `testEndpoint` value) +is conformant with the OpenAPI specification for `Order Service`, version `0.1.0`. The nice thing is that it's just one call for validating +all the interactions with the API. That method is also super easy to enrich in the future: when the next `0.2.0` version of the API will +be under-development, you'll be able to check the conformance with both `0.1.0` and `0.2.0` as per the semantic versioning requirements. + +```typescript +it('should conform to OpenAPI spec', async () => { + var testRequest: TestRequest = { + serviceId: "Order Service API:0.1.0", + runnerType: TestRunnerType.OPEN_API_SCHEMA, + testEndpoint: "http://host.testcontainers.internal:" + appPort, + timeout: 3000 + }; + + var testResult = await container.testEndpoint(testRequest); + + console.log(JSON.stringify(testResult)); + + expect(testResult.success).toBe(true); + expect(testResult.testCaseResults.length).toBe(1); + expect(testResult.testCaseResults[0].testStepResults.length).toBe(2); +}); +``` + +> Note we're using the special `host.testcontainers.internal` hostname that is your running host hostname that can be reached out +from the Microcks container. Remember that it's this container that is actually calling the `OrderController` API. + +For more information on the `TestResult` class and the available properties, please check the [`microcks-testcontainers-node`](https://github.com/microcks/microcks-testcontainers-node) documentation. + +Finally, do not forget then to stop and tear down resources at the end of the tests: + +```typescript +afterAll(async () => { + // Now stop the container and the network. + await container.stop(); + await app.close(); +}); +``` + +You can run this test with following command to expect a result similar to this one below: + +```shell +$ npm run test:e2e -- --runTestsByPath test/orders.api.e2e-spec.ts +==== OUTPUT ==== +> nest-order-service@0.0.1 test:e2e +> jest --config ./test/jest-e2e.json --runInBand --runTestsByPath test/orders.api.e2e-spec.ts + + console.log + {"id":"655c81f3de496e494b7485af","version":2,"testNumber":1,"testDate":1700561395445,"testedEndpoint":"http://host.testcontainers.internal:3009","serviceId":"655c81f3de496e494b748596","timeout":3000,"elapsedTime":72,"success":true,"inProgress":false,"runnerType":"OPEN_API_SCHEMA","testCaseResults":[{"success":true,"elapsedTime":72,"operationName":"POST /orders","testStepResults":[{"success":true,"elapsedTime":52,"requestName":"invalid_order","message":""},{"success":true,"elapsedTime":20,"requestName":"valid_order","message":""}]}]} + + at Object. (orders.api.e2e-spec.ts:69:15) + + PASS test/orders.api.e2e-spec.ts (7.36 s) + OrderController (e2e) + ✓ should conform to OpenAPI spec (607 ms) + +Test Suites: 1 passed, 1 total +Tests: 1 passed, 1 total +Snapshots: 0 total +Time: 7.409 s, estimated 11 s +Ran all test suites within paths "test/orders.api.e2e-spec.ts". ``` -## Test +### Postman-based contract testing + +Contract-testing may mean a bunch of different things, and you may not have an OpenAPI specification or it may be not enough to validate all your API rules. Luckily, Microcks allows to implement different levels of contract-testing [as introduced in this blog post](https://medium.com/@lbroudoux/different-levels-of-api-contract-testing-with-microcks-ccc0847f8c97). -```bash -# unit tests -$ npm run test +In our case, we want to perform additional checks on our API: we want to be sure that when it responds "OK, the order was created" (Http status code `201`), the order has actually been created with the same products and quantities that those in the incoming request. In order to do that, we can use a Postman Collection containing scripts with assertions. That's the purpose of the `test/resources/order-service-postman-collection.json` file. We're going to run and validate this Postman Collection in a new test. -# e2e tests -$ npm run test:e2e +During the initialisation of a Jest test in the `beforeAll()` function, we're now going to use a `MicrocksContainersEnsemble` instead of a single `MicrocksContainer`. This will allow us to beenfit from advanced fetaures like the Postman integration. An `ensemble` proposed the same interface as the single `container` and you have to load your artifacts - including the new `order-service-postman-collection.json`: -# test coverage -$ npm run test:cov +```typescript +beforeAll(async () => { + [...] + + // Start ensemble and load artifacts. + network = await new Network().start(); + ensemble = await new MicrocksContainersEnsemble(network) + .withMainArtifacts([ + path.resolve(resourcesDir, 'order-service-openapi.yml'), + path.resolve(resourcesDir, 'apipastries-openapi.yml') + ]) + .withSecondaryArtifacts([ + path.resolve(resourcesDir, 'order-service-postman-collection.json'), + path.resolve(resourcesDir, 'apipastries-postman-collection.json') + ]) + .start(); + + [...] +}); ``` -## Support +> You may check the `test/orders.api.postman.e2e-spec.ts` file for full source code. + +Then, we can define our unit test method that allow checking that the `OrderController` (here via the `testEndpoint` value) +is conformant with the Postman Collection loaded for `Order Service`, version `0.1.0`. We're doing that by changing the `runnerType` to specify the `POSTMAN` strategy. The nice thing is that it's still just one call for validating all the interactions with the API - but this time, you'll have to call `ensemble.getMicrocksContainer().testEndpoint()` as shown below: -Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). +```typescript +it ('should conform to Postman rules', async () => { + var testRequest: TestRequest = { + serviceId: "Order Service API:0.1.0", + runnerType: TestRunnerType.POSTMAN, + testEndpoint: "http://host.testcontainers.internal:" + appPort, + timeout: 3000 + }; -## Stay in touch + var testResult = await ensemble.getMicrocksContainer().testEndpoint(testRequest); -- Author - [Kamil Myśliwiec](https://kamilmysliwiec.com) -- Website - [https://nestjs.com](https://nestjs.com/) -- Twitter - [@nestframework](https://twitter.com/nestframework) + console.log(JSON.stringify(testResult)); + + expect(testResult.success).toBe(true); + expect(testResult.testCaseResults.length).toBe(1); + expect(testResult.testCaseResults[0].testStepResults.length).toBe(2); +}); +``` -## License +Finally, do not forget then to stop and tear down resources at the end of the tests: + +```typescript +afterAll(async () => { + // Now stop the ensemble and the network. + await ensemble.stop(); + await network.stop(); + await app.close(); +}); +``` + +You can run this test with following command to expect a result similar to this one below: + +```shell +$ npm run test:e2e -- --runTestsByPath test/orders.api.postman.e2e-spec.ts +==== OUTPUT ==== +> nest-order-service@0.0.1 test:e2e +> jest --config ./test/jest-e2e.json --runInBand --runTestsByPath test/orders.api.postman.e2e-spec.ts + + console.log + {"id":"655c85f4876c364024107d3e","version":2,"testNumber":1,"testDate":1700562420235,"testedEndpoint":"http://host.testcontainers.internal:3009","serviceId":"655c85f3876c364024107d24","timeout":3000,"elapsedTime":65,"success":true,"inProgress":false,"runnerType":"POSTMAN","testCaseResults":[{"success":true,"elapsedTime":65,"operationName":"POST /orders","testStepResults":[{"success":true,"elapsedTime":51,"requestName":"invalid_order"},{"success":true,"elapsedTime":14,"requestName":"valid_order"}]}]} + + at Object. (orders.api.postman.e2e-spec.ts:68:15) + + PASS test/orders.api.postman.e2e-spec.ts (9.316 s) + OrderController (e2e) + ✓ should conform to Postman rules (1965 ms) + +Test Suites: 1 passed, 1 total +Tests: 1 passed, 1 total +Snapshots: 0 total +Time: 9.357 s, estimated 11 s +Ran all test suites within paths "test/orders.api.postman.e2e-spec.ts". +``` -Nest is [MIT licensed](LICENSE). +> `npm run test:e2e` command doesn't work at the moment because of conflicts when chaining e2e tests. We're working on this case. diff --git a/shift-left-demo/nest-order-service/assets/order-service-architecture.png b/shift-left-demo/nest-order-service/assets/order-service-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e8ceed064e3e7568fce48c16db0be3fe94207c GIT binary patch literal 91067 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�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

KOh7&Sk(R)dfEZQ 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 PkL(0AzL=6^3cY zj)Gq2g*zzA_M*k9jAyE@rBMhYl=mc@ZD=^;)|vy%RQsg^0}5}QHxN6i&Azj5U334a zaOg3>w#8QIfLeb=9+;s%HR|4^b=ABWWPNUfS9;v*Hjt@Pzc1#9}M+XKH z0}MWHd!|o0p_&Rd%=P2Z_bi z=cp8zB*8i5Xt-Wo z4bSKB5t2%St*BAf5=)hk!m)G91axylTQ{^Xy5}UnoL0*I6^ z9kQqzFxfXRoEVn%;(BZ0KadPkUB*=5GQfx-PX0r1&?T`G22j?RJWyBQp*6&QjD^p| zAjrjsD!iPS87jxLSPzuAR3Zv0p9MUQGtUj`090wV)tnT4I+iDoDuFr2u2)y80k)Z~ z&XfLm{_>4a+xs@ZmS!rkH8Ic&@T>jLawoN-{;@p_cXso2eb`qssY{vSD7MS3Em*f} z(GL<;gE2HP>aOP##K+<%pCKqkskymyESkkH59WSEuxRwg+3>LcoDChvwv4(c5ZF!%=~sp@dL@B!~mbtL1N(`-xw=$eK}BmfoJ@|yul$sQnnen0W? z`nS8O@dX2-6yt~n94#sm@~%uiHF5DKc$jimKH-z;s|xh~=L|5^ez{`-VkGIzOo*`r zOq_P;{wbH4{+G*|KrVaJ^X7T)xsNfNOnV-U=ap#JeyZt0!EREkzmlHIGihs;0nx9P zEozj|FVc5dwT}!*W(y0KQFG=lE!U^%d$p?vTlM5+RwXd8-sV_OBf>dl||oiyn5``bSn5z;ocg}lJJW4 zEDHxI4wQ4fPRV`o3l5@%9u6mgS1D=Pe*rTMP_K-m0yunQ{|Y;@)5b)I^@5?CX_rgh z%H7H&yw)+XT~$rJ#^``tVRsH7#l9JSl{b~#$|9)&q=pC zI56@Lu-}v#9tZ(g7gl64+rDq~+!tTfX>hrPlA=p2f1#o@9RkzYH>U*sxYvgBl_n@Z ztVbo}7R4lbtQ8QP(2lLAu?q_nsdr6rpeRgi(m%mIkQWRy zH6;0a#n)k>Um|RFDHoQ;_+^oHg7XHXiDhAy;QKCgI77AIbUWI+Hw(q79f*NN0Q;^gU!hX^ zb$h$nKsHSd`9GXdkqUe923{dKhZO*AQn;g;MjM}mWJe_p1A^mtjPbv8Y6}x6GD3J1 zWf|`<&Z|sa>mmsg0O@podc5Kj(2gMFS3T>0Z6VLdJ-)p|KmJPZ-#^@~c#7xSA#(J8 zM#$2R5^`?crk!u-Eqnu_CipvnS=Yf4D^{yNUTps#`j1tezK{>k1t4yqSUeov-qH26 zm~U=DtxJusjBo}jQASKVfT8GFH}33%qosBjJ0tl_aP8>fTlZK)A{u6PG7YF$JgQTc z-}SEU`#4TK=yAykBA#EpMh+u3{rkJ|ddBg7vnCCvP_y;$*V}#Z_110lL1IYU0ZYe% z>+o_(jA752>(p0}xpmh1RXU&hmc#!S%MnLeq<*)>qSi@!xyf5@0tH=NzWEv?%`#Jb+j{DIP>SQ3Wf;<8YM+%e0oBcmX3j9~vk!}Dp@w;W8vo9J3 z0Nq+{QHZ5EJ&wBt_^0Io@t!}9!zdjX%w=|GxHv8{Z1H8_zn*N;psoM_V z-u;Dk#dRyqlRKyo06X$CSIAH2PmQeod=%$2r--JS_O?Gy&E@Y38xq20DJBv8HS~F| z<9yhn&5wSq{O}Gg{Wrz0q+YTym|`1csuPXd44w$rKET5DNLHH(-w=SF+UEnyHU;`) z{W)ew^nKPx1w^mGA~!(0s_UbKvuXlnq@n{kRf}9&tYP6h`FFzNf1(aEQ&|&GZrngJ z5~$`I4uxuZ&Gn|t4BW|bgse2=AxSPuUDeB;7ffZsRns=^j$$0y8R*mXmYAd}9313Z zf7Q{q%Uo;j7CvnA4+Cs~o*7W*#SMuUZ}{Yj!3ByN`dVo8REzB7_d6PjU7DRz zwE-%GddgI}(m}nM1G0z!?rHV1TN_(+CU-5LjL*o_y|SRK04psN@p5bRALUx?nnF$K zMi+6^s`?s=AA0og^~Nb&=d8Dwf-6ZplrL&Ln`QvqQuIBF4F`c5T&Qc+O*Ug0;B0`WpOg?+xr%tZ6aDA7Zj z^_l-~=!f**kTU=|j*A{^b{(=nJq3f_NTBAUb+jMUFDqdZvF8>RGLeKM(J+Yd1=ymz zBm?qX5nyC;Qd7xyXKNS-Q{Q}-OJGk6jg;z7!QBd_@{zm z2Qox6#JXmhJ$V9WMvBxK-?3M|NXq)`y3q@HBU5NX4e###N^8;5&>-;EWjlsW^Oa$9 zV!lEWlz>jGx={0vXJ`fgnW~ve&%u1Xx|-TIi(X94p-HE`sWLT1l)cYCM#%m@hzpql z$*9W^yY@}G=wvv1{xn9diOsr+1S*8i_IBcn{`Sv-wdH5IDDPAl+fF0Tj+L=fW;fR@UT;~b8Y`F@au&>$dMD&tEw}j+#5@)bT zm;C{37$&0xOn>JEZ>@>DTx6JQ(@V!2|7wds>Xg637~6F@)J&NPn>~)JnZC}WR^pte z?UYb}OtkmC+Z_0O)7gN7!u+=59~y;^XyR!Pvbcn7PJM`JFgGm?@-_8GZ2OVfFrmy{ z;%JZh<{yWQ@{@!D*G9IYG5r|Okhm6_Shl+KH@OBE=rq~#K9VPQ2l@X3;rzBZH)sKm zDF&g|T`{w_Q{()C340MUN}>}D=&q$pVyq5Wfom1svU@6YiQp`mPQzpj$c5vY8qj~A zD$Nk+szYXHfo1FIC7g~%Lh;kZ{;Zm-@ur+i(OcIRKqlaI+t=A0FNp4U_CCMpY;-%& zC4K8sNXJ4fC|(!^IJ4D&W69f<987*~zyd40nVp?I2OJIKw?}QtDnXpO0QrAOZc>r zlx*)I)D1V;Rgd?jJDt%`SXNEw&CfJ%69SOC1Pp-AyxG5vx|E8U=H&y@oNCmk-n}s@ zOok`FW}=eGfe&zfbl>Ibi2m~ns2r8`UWk9fMYo(J_zU(Q?Y-I1?TZ{4V8&KQW`j2> zxny{WPX8+LF9(0rYi5hN$^Hq~M-;_aREtmZ-X-yMF?lm@BXD|#Cg13zU zVOJvQ$e_VW=JsEbECv8R6Wu-)Ko3x{viJQD53V2rIDBHG*iK0RXecI&51ok3O04w0 zwBPy2p_U7pEH}`52u_v|*R!={DKlzIud|zH=={WMH>Xj|x?x2Qumf2DTi6#v03r#x ze*JMK#&)9j`{N(wTm1xJ5CTR_*vd{p27}NiAUs&ZAS&a`@45LcOWOX{NXb?_SRE)o z*tV+7D+H4dFc=m8$M6`ST>co5LliGVgn@(+6a8O3n*nE1o+c z3p&XosKn#gh`3v*>>d=;J`X@n_o6{E%vesjG@|4K-2n4d5;~0HrrcTiSLarx-jN>W z5-y)jgWY5s^{VvKMV!1^x6g3n`WS|KwhsJazeF`ZTk^fYG-LUr)BNTtX#zQrQf9A39f?WMnTL z@CExMzs~54?EL{6hx9_*y(WZ)d+oVrR=5hJzd4ny!!mdDqDID?DevxFUlnfF;cmlJ zBNgth;B_HI5|3lIPGLSR)-9&f)G)SLR80I~YE#}tH|C$%+8}sX%%AKgg9)HjtlC=_ ze+2nKU^aZx)S^I#goH-fdNwOk>D&e zJwPW@e2rZEwzc{zrs(F?R4elLd8e>vx%NG-`rEor|#fm`fSjDm(3G)-I47Kkh#Gj;C6p-hFQOeP>W8^QBw& z7V%mLAhZsI7Vr^Ni>z5i@IVa6syM=0zY6U>XR^$BkkKxY&2L2+BO+S70RnwuJ?p23 z=mkvz`P1i=@u%-!A*0Olz_GmY)?45LXZ;L_8*4^zsmqCM^29xj9h2z(d&MgvmZ|sf zx8jM677pQ@X8r(E@G(-%+c-Kxsh$#wYQ;%Y zx*Zuw3Nd0-u9Ah!>a zFe#}Wjz+~A$vHNde!C1XqzGCty7|Xso9&S_(0X$ihT`E8F)PV^d*heHehWF+CAC?Z8p2?&u5BF$9O{4ZxO6(Z;Yr=Gk zGFe8sTmUNQ?!=?QdOnW6TO+GMZL`R4q9KxgIVUtFTS3bqB1ZNj( zNI3mE>T=%k2HE8Kr~V4zkxEwA2nRY%U<1~-TBfS`Y~I~u3KsxV_5)|=QUhnrmo@xR zEb4Xt257v@2BUW;cDDcAlCTiW#6@gb!#$=Bltq~{=soh=V=kR4R_BQQ7HU4X zF4xEjx+j3nhdE-sGgopx?pJf{RAzMYttP40C|DGe8)&sk9t#P2Jj5PUl6f%3G3hGc zkQ`CB;9*Q*4qKiFexUBL7xjj4u=H>TE}={A6ZXvZ!R$uILAA@4j7f zQeFGWUE`kg)6!KTGAz$_bZwDNBYy-tHR~!ghAutv!LQrrq+EphSomv_od1JOLjK0P z=m*w6aL}X4A2xIxtbhGtn`^AVcSO5Tv{u^IK0-`f22*Kl?dv&s z7aZLRQ%#Y-?cDOu{rbkfxs@3pk=4%C)s~wTI!zF1k6KMLh6lWemDE7mz9_}zs@T5= z%Nr^h%0enl-K*bzN(mg>7f(tE{D#(^QtL(Lp;wI36X!Fuj%6?O4~eI7FJf6*6_G$%ukwnenp8C)Wz6BMK91|;)VhFb$We3 zpMG)~K0?&rI@_3P839~@TWS*Gak6hO_3!!D;Q_G?Z~yU%Z(YW22AezYEI(a3WLCJn z`ktWMHI@Af`z@xkHnXON2-%5J3BG!qbp2t$ra#M+Th-tZqCr&Sii($$)q-ts=7-t` zOd2D@kD_9NkB(;!wQJi-2Ma7ncoy#BXvj_qRL;^y4+Fo?cztE6V@Ia9$i}JBmefk( zJkqBpdy{UssRI-UiZ$K3^D49xZ5UuL8EzKp+rZDlNRRk@9zMi>$)ox5^F_A(^H~bn zUlrvKOJ?87+q(M?&_n@|67=wTg9Mcl8PFeZApG_VI_hm~x)aw&*uL-oCuV@lp9-J8 zcKX)f6FL+_(8d@^z=H~0cE*xzVWy_p{cdlg@S{}Sn|`OUIHA$5JV#cpZ~a1wpt$4Q zZ};)}^-^9YooG-{<5&4KWAdZa{JX!7qZ_DEYyty|2k=Qj;zx%aA~h!yopnkV$+$U& zvcDFqJ@f9U%%*2WD4t2vYE+9??qf&2t}MpAjxvbEyPl)k{cRlPqopD*6iK`6##{au zJv!BreznxmcP%y!MUJbEzt+qnV#59X$A$VU9lMHc9~fX75L@yb-6cBrvJ#Q9sHS0x zoJ+nz*TyE@wpL}fbh-B(Z_u`=$vvf0Dj$gEJe)JQ=5x-HEm+6f<`&uZe15vpuo1$( zJ61VDVeMaWLVs3IYduoCty5_gP*OM)PkuWro>wa2krF6P&=n{>^A??E)BYk|dlkVv zDoYk1yV8geDwsO;b-Gs@(7%42Ur&bC{aVOk3OG`BoA5u^X_O0=b4~%3IG2DbzR9yz zv43&zCz?-q;hg-sNJSYTD^eZI@W_<`zCr1NfmhD+I|_iABc6IOAQ$}%-aIbBq$EV6 z5g7aBT{`=O%TTfUHTl0-uqsV8FEFCuij#Cil?l~FJk+~>mDZY=4up0uCtr*ms@}gg zBW*x7$|3z;rB9v8LjwhC1@^3bKs{b8v@LShPyj>E&4s{7%Zr?$d>d!C2^Bqm4xaNr z#mwQq^-**N*VssY%50kZ5o& z^3!9Y(%)_ttFTqAD?HNf0mhf@HnOds}6 z79cz`{Z$t|SaMH=C@HT!% zy~Udc%xAiu9}6^yg7CpzrCL>Cr}x=&_c}4;@fg*?Njn%2mCV56!9=pd7;})&C!FvT z+FG!iDQzvj28Zz_VnoUp2BJ+AB*1&WJ?HO_Pm_^Jhs@)>>{$#(>KK@*yWhMjccl>( z{h+)bcR;%#o$b**O_UXxS&bseRI05t=mO;qAiv6N*B%u+Hq>W#oM-K)T|je7=PxBz zR@qXiJMVQ%hJro^+5>TTPOx_38U8G`@nL?wV$PjklgfM-mv1;nv&XIEl?XSo$Wv<+ z3H(ZCf=UiP{tV7?$dm|qG3StYa^kr>d~PA|zmg_E1N2!(UAuJF|5~UCJU|o#@w(cb zEGf7*QEi4{kn$Y~-&+9n&`h?=`hQ_xanPQY|3zOqb8+Z z;_7hGnPsIwxB0e0P1jy!)^pw!EDHCMM4|bCWBU8;sz3+3Hdvx`zv{1V-giZV&~sr4 ze&Vze{BZ1;H2>W94s5Am ztn_I2H>Q^~ZZFr-uQD#m^NcRa&UWk_jro*(7}kDUp}^9dSlfOCanYT1hJmxR1K-3Y zDdi+6{PR+j$Aos!iLGx9$YGY=d%hF7MEwk>l9=Qbd$ zLUlyjp2o3vhB1!XXy1B+g8fG-ps#S#C6{!2cK_{U0Ut853!3G$yT$8ojxF1yLD~m* z$UqpCj1&s2;JROvz6GX(k@7xgucbX(o6kD4>Jt2rmG?IBYlAW4N3Tq%FCFY635x&%swI zF291N1HmfND1A&xVkEG+udr`eT z^hpNTfctWKwx^h)9}01NvH|L6bxso_9f5l}Xe5?D02J5jfAiHAe|9;Xp449Az{;oC zGpU&n8ts4?1K+Oo@jSGrX9{FW=Lgjz=74W1U)upz!1I7!vE9l11lK-PG zV5oA^9$3A3vfG{Nm+wy$sq+H%32mv=a?MhmuV~n$8?g=pGqpDOY`V3*i3g|6fEqth zrpKRP;phbT763yZd;RA5^P7tUd4PwRv`We^P=I{9Br2t_vyA(UO(vZuxA~imkM(dxmwk*Wo1Glr-{2}~sZCZoo zb-peBh4l3p`*jL9%asmKQIEIa$M4~>$zsnTvwK${O#q0g`kVAzqeSn=-~2G*#WqaF zZxz^TD+X(1wu3{n^?{j*#ujmKXlISx&4<&Knb&Wn1rn4n7{4d&P((K1WdDLe-XaNx z3}PvD^hj;vSe)U0%pVT<{-@tZ9HC-ohECx&_AAT5!mebBAdCAn-A-_b@~b&0MrZ&F zCr_2leo7)Ea{wLcf@a=7IA8=vc<)7kQ85~6Kw>T=^=pC&qTlKXX%s05s`ofcXGIef zcwDJTr-?T2T`RO+=B7QmG*TJ#Iie^TZiR#r^U*bvuLS|HxPUw8rb#`BoaxE$zz&0>`OyF7K{?C5s5~?aE=|E z+%vPmq4=lB>k^~m9WLbI`Cqv}sW^^(T7Yo&e%|2kPZO~95h5Pu_^pG;{{i0rxmw@|qT~Uzxg#zv!^{-G*ItyQt|HFdePgwA!cHGuWM^O9Mhfdt|d+YfE zWvZXRCn+orSpbV~l!8%I-uqm(3j&wuEZP)+At}#W=_j8_2WohDxO4xs75Q5i zM0Ye*#jtZqR76A$aMR0>T_Zpy;I(pknHn^?%OF-Rc^CCZv4kuD(bcQ{!G;nk^V-2&*|wOjwYtB-Zp@Zi}E|$T%Db~ zq+JYKzG8}WUtgbnPbLSa$FcG5MA7&7P3(MK3l4n$cqVD>_5N^wE|(uZ?>O{UZ6gC- zBX=)WfE1Brf;q5Ppe?M_PemeG)e~j{V4c)-|~ni6i5#sQKyXyX{&% z%@4A4)HNbi^PC;!_KAWr2^AoSidj2wMSwx4GxhXCFu5ndN$XCX{b|GF-Yrk_RN?h_ z$3)i7j6P4_VcY)8((-{C77%+9rDH`9)fKm{`31v_f`i;=vf|BE>7nTTO*VV(HqE;u z+@_P8eBMIw!y2j&uCN8=Rr6H|M0?cT^xNeEHoNMW)zC2sKZVEC_OpYEvn77Jp_JQ3 zIJKj~u84wnR1o>UY--6B&#nIccqZnIw&H>Rc|F)(inLKnVJYpF77Y<^HJt6Mibu}S zrC)keXaq-YPFw>+l9Wd}-|0&ek7FT6qJ9PC(~cSx*GNk`SbGt|8FaKUWM4k{O=E_B zf~;xU3VPP&DH$ck!Ob6FZGpqQ@rl3$5j~mi*;xnAUdf`~0cPS)Of(br z1YF2uGc*6qz#!MB2XEvb_IMyQ%31C;si2(u=J%{@rimsz=-BeCBARA>>!i zReG~=;^9|6hJt@UV`wv|B`jvDz5?WlB{UUYT@bQ{EK4kX252@d2-U|*geGoq&f(}X zW79%oc{i`vg1_%?U(l`n^b2lv^N|XUIX}z3t$16SVgrZh$B({b^qPpA@5ua2TJV$* zOd9Ba){zS(J5K{hd98#!UXI>n&S!$PA8P)O2a^5Vs;(!0{rHNz2WEbJv&?H?oSdVF z!TYy}Y;pXHCWCJ1c&B@5=YsU*#olcHq3A;m3Wy6Vecqv9A)XpINNB>)3Rz`XAVIKF z8LCqvonYq@=Mctx1y{kEYeXQcIr}<*$7rqPDnQ!j69Hc*F+0kt03pTP?!*@Z3HVnr zn@fYkiL72?hE{wRyk%@-W*f$Bdhx?5vzyC{tGMOS^oe!1Vgfl5V03-4zrYNDFjNTg zw8e%>S3gQTZL9N}@P}s7RmXcd*qgVSXGoz!HQx(s*)%TTRvSAJ7NlyraSLr019KXl z7SY2wh39s=v8M7wdA%T?PnC6mvH3~BF2&SuIt7*lMjAhDEyRx#Jze@(EJA8-R-rRPStd$zI0vi zODLzb#gk6e{a$-(x6qvv2*>R{l&xxR>xpb-%}+`)Mqnto$FHkH+2C`(SWgRF;#bS` z%NLF!Hl5_UjBdR1Rq<6}+^sb%x4;h7dCCmLj@KUyEE_xJ>4iO*c&jUqG{jwy>kEGX z(Sxf>$SgOBCn_pL^Ty<*V`G|*Aq5Z9_hfnF8aS^aA25j|P&M8e67JIVi;V>Z^8-F0 z_;ryU`=!iS36yTA((@?EZ>gm*10sQ*3$jqgR2vCXxC}=I_@S)hYt5MzVhYGRgZ1w) zLuLU_U&yO*4AsG=1);dRVf1;~N-xTDJXBzufDq$Z{gP|F&SbNc|FkDDMK%DKjq) z=9^vxM?5V{rHS~?0godUZfX_Bk_E|SR44=f@P0-08zFa_JIkA!y^1DQ22F=7zrCaf&Kn4}Rpzdtofg^n`u3M|GPz8nT zV$YjAWzyvNRTmX#d$VQq;Ux`8n}%%9?b!e8kxdzBj#Z4lvwuYYZio>?uG03MFSUMZ zFnh2d)g2FjoWN14@U)j(6Pwpl5uMI!{l%0(jU~;TSs6MkS{6UF*V;_i156o#Gq)zC z(n;axfbOE9nM~{U+TX6aWR?mJx*u8uX3i8muG+vIJjeY-P5w)CiNfzZGDIS$9pKZ$!O6@jPjk{w zZXx!k#{BZB+cx7pb=xkoEn$2pITseH1nmCi-)nA|xjDPdj8m*n_kYCU@srB7VjxKQ z=6^(W04A!BB7#W`b|>rq1=S><3AxBkwyx%h6B489A-iw)#9{o&VJA_a^%8K;@nIC5 z`m;UGxt-lmloy^C#oQTwgkB$f3FcD4fOMy=02DQh$nNc0b~pi}an{GD<;q|Ap1T@? zH^Ja6Bdao6T>KvHp|HerBZ0|NOW!oos;^wlHV(GxKcX}^k;J>V>3)pDMu;$gS^)pT zcCHPzDPNdvkyBb`fY1@$r*2*J5A;T3; zhuvrSad_KNZ|y*+&sx|78bb2z^>T;tcJZ)nWIOF~JeN|N+jg{(#T6W`>0x4hf79%7 z!)0xyENU!Gcp_K1m*xc$w5XPIs6NNn$sUNf&3Qka4- zxpz{xYtSIWINQ6xE8qFw*9bhE;sDV|-wAv10M-O8mP9M8$($s>>_pYW4q&85tG zG#eOkml(hW$kW_I>B90U{0?zvM45RFxz`ca&y_uC^Aev^AIQKNDB%}$-mEF%hSX0|J3Xy=nAU@EEo-&7Yb)}t7SYLSQ-l3<3g^YH-n{~3-xrJ<_KbN zPqfxDzb&AhpvXKmp2jmX-D#|IxB1;R4~XYVPB>-j{|l=B0VwA@0h-N+V+Shhv- z4bzU{4S$*Dp>#`CHM7HJ@=yKl|B!y$2xk-Iy2<2db~sgDc9 z)bW&{$FQYA%qn)X0eVd9NIExMyWM+Xpt&()dGAC!h?X2}6OSozh6||l#*cS%zmP4$ z_1!5J6DC4_{^lPm79(5Z%F>Uec^MhIs8&MouVP*+&C3^l({+O%g_Cp#><1D1Zi8wn zNxZlLGf+C%mfkW;d?X%#Uk{Wg=LS)Jv6E3na%S@v+69JGTVakW<5D_>Vy^+~I*|xdiqezQ3C=*F(4NGv7@qJx$AgUU{w})eB#OY zTv)+59Q_~L!6`*83P%8@Eg+K%hhHg#@Z*@*i;=wufFpCi*l#oC|3@0J zIPuw*#+_6Nj*vz-L(ct}^T#t8=ZqaG= zeGbvkXrj3lJwe$ggAPE6eN4sa93GogsLw*=4+6)ZDO!MaF)xSp3h_{UT!AYv z@l>IpYqE(ldZ@t!3GbISRuIE*8i%MBmk`X?z$pQ>d1>fk8lLNZT{&gcn* zw0;=o`Cs_wLMkN@D*M)8nq*+hjYCMShQ}J%);gO+)3!w2ryglA#lDdN=&$SV9(MGiumqFw<(XmIcOb1>q08qs~1H{_lXLtb%s3r|0ajAU3O7=iqgrPaW?YyR zOi=6Z;C(4buy{}gn}$-O^~5>>4B5{xT5n!VGdrll>5n{WX&580_6ZH#<@TjTSkyfK zH9+(Pl)6vEI?Hvpqp=w;N4x&D^{ze{?39-sQxpoe%=?eNX&V%Z00*(XOlD2Kta@TF zNp@RtwIC$}>o2~>Xj@fWey$k`EYXMXUUmXFAuIf8{&BVNGz4MV-pd_TW;t$WwH z{|QTsdFq_K_t_f?UXXEVNEDj}XRn3*+<#}|A)14V&6@Z7zr%7)gqD~5&WIudCC4sd zedGG2WQnS83Zd)frJ?-vn|0bdX7f`sfhuu}Zzq@a^!PrzqzGpxtuYOjczDw?%&A(n z78&Ka4H}}yWO9!yJ|_K@&++AqlSQ1_^4d{+2RzsOlh2j3hDp_zRVI8fJe#4xgVy%70sTr-e=aq7Q zs{T5`92J^1DVW>@20>C-qu8GvxqLlaU|Vche^7QQ?>w$C!)xcvEN&nFKF0BEC><>9PV{4BS zk%8$4AY18jjnYlefplbvAEdSC(Ogl zKR@c!IDCob)Rj$mX_F4d`&BPbck;k|^1DoF&YDK$`yEN(ZiJC{+VQti}MXL zQ-)FY7ym*f|E?PejpC$|aSc``oZHq}eZ)oCpZ|4+I#c>%KvwYnBPEWT6sPHG%c*r< zhZW=FKP|bghP4mk?%u;^wrJiaB3B+GUcCF4&2u$yDi2HwZ2r{KIS8SVN*d|!BYKlF z<^rv|sTdWDB{?zI`Q!YgVqH}zW~H9($<`GB_9zUhgZ^+{$_A!BrwqW31FZpe->^-E zUHC1G?rBt*?m+VK(_E9b5D1iwVrfZuRt`EoLdgw(pQ52LkSVd26lLB!_RBeH@)%4L zV|`)%$MPB`Uj0xYyRbLma^n0#lu=aQC;;!v)7SEI#cwy7Sw&v|_VJn0C}6_9^W!$w zj!aP|?2G7(WWZN4)>cWDOQ#+TEdXQ*MM<6LD95coyXYct-aHxH! z*5M@%l**T`q1FS3L_O`J&p&wVl|L&wEuFX<82gBwV|zDxe>IW*Vwv?9*Q}c|-try= zm;FsrU+o9Hcz%L6N;psna+eIw1ALRYm}0#&XsboC!L#ikDpe)X0S+Up!KJ?2^gfd6 z#v0qlCU|Craj$PEHzCgLp#~;<*0Bm(N}0J}VxMX0u-)CY`2Ct*t#fjj9i}&jH1`Fc z-PrgKQGIK%PxFtkHn5g|*jL&EVQ`_Hg0+I{h(!j6FhxC3awLc92owOpUp%e}Za};; zEx+>p1@+X;#lQ6pDJKRT$VOql;M$e^?gN%6$`O!=-eqF?7!be$qbWqjd@G=EY8|I5 zzn45%^pHN5wB3wqK;g+Fyf+-E@1^Z;?QqhLzTtdH@A6W9?q+bopPes^^4J|p7Ezt4 z_;UI9jLW)4*%|hpkYuxMSGbdt7Q=geEYCDHCW41mg&J4$9*+L0elc$zQ&4*yn0p@6^% zj|i;zBl^i{jcS_tZ;-cOu4w11KQ}km-miU3#Pf7p20fK9uJ4-!GDlwfJNyB&%F8cU zSi058br9$sLyX=rtF?!}{@XF0STBLZg?Zb&J>ZS?x^n6EcQ;w#*%u#j9s%E*SfasJ z87KaQ+=rob0&zYwO>ZH0D3T6vN(Nbq{Qhaqy_wPt@i48EgWfEDalw=pe4|Vttoe4V z`Uly;z`{A()3+EMnKe^!TOps{?*03i0~u_1^Q=}ZZ>wSu@*hxBp#yGfH*t~Ym445k z;qa$F?57vd4xxPxgFhYJH2uaFMLvYNGP6@j$>{RNl}I?#p!qgpPOQ?2&Jg?MZL{Vwg_I`aHLwuiDJMBWwlV5`YvyUA=dm!T6(REquO3TKD`Z(<& z(efNECUyVg&;T5Pkz1v0b*1ll=^WP#3-7Q$ZpHkpP|WAI&z*al!!e^=5&C%YJ_)oH zBaMAJuIh|ObZJRwIwS9GDs|cKd$CGp2i8<0sb!d&m@B$~-P$<{hS1?Kq*t|xPhjp9 zR4iWmpT*36deAC54Mbw$JF=EBI(dXoCBCLA1f(|ejP<7W+B+6TAG({7D7MA~Ao2%S z*5~}o?_wI*-n8_Qy>1=V+UnfJrNv-{(&+pQ?!8P#8>%#v`BV}clpy{I2GuN<`8)e* zb&QG~@hUub2_LkdYq@ze?(^z*MB`M&(6M*G9+sQN$m0~%`UjXZpj=yLdvvvQv@C2Y ze4tyTZ^-s76p_v#j^Eku`fpweVFuYovswQ%!aJ!EI8SiV1B=7|D>Vq(X-QGB(Omk9 zltNCaX%az0z^i2O#I5oARJ#X7^Zo6usgFs-hba%`a0Wye}H<1If zMFdHWFkKWEWD(8&&4MEND}9gjh3v)|4;R`$J);s0)~l`mQDzfpZ`?~n z0Otwj(tVvT3g1Ey*w1f6H?aY_P7lQl4c%;wD_UL~B=D)ehIhr)asOAy{FXSkp(QDD zd1S=??_T54^xKX0Jk3h(78b1ZfLW1?5-oi~i{lIHsT%?-zodb6vnqrcVF9IT6tZfP zHl$u+O=-A?%?$F6?^iGLy)d@}s}4o|@OR%$f4&U5LggFPnJ3fyjeVL}IZ$4cB#YY_ z$1MPTvHIE2x;lszarrRwYkTbbJa&HvKcXtoNZdx9Vii{u@W83l^!`mYYf= z(y4gbJKh=r@jLNXJuNZy&XdX7qKqaS5DjR7;lv{7I&x*5zT4lAai9@T#TZeBa5E3g zY$3n5$@uJ=ZR6~EC=|Zo!=roq%`H@XknXhz;U;3u-+}uxB48~LuVB7kh6>z*xlSU? zIC?be8~Bc*$q}qc#~QcwvLtfRX|i(Zof(B(K!V7z^(K`bK?xIBm!L?2dT*WQ7$2 zF2-h6h1EF0$_C2VmY7jK6%2w7*1I3A{~|{`U9J1U!O5Ujwu+LyF2h09?M=QTXj}b@j)T0`{L4mzMI3yG4fFX+lR6UeH?i zuJ$G50Y0YOCcy|H>AG`a)#u0auAs_#V$l}ItKkk>G=BF}ukQa<^#P<9x6l9thyN2O zUi1&m5S6eMA!ZUA zA7%mGKMvH)Zj`_A@BVy5^j^s4L1J+%p<0=3R6~KSaG{bB27zxb6YviT8$}7BcoSXi zPb;9pgF8?5r6^9VNsV#JF|$Hrgb5t%H(Oh<#Xk+s>qsPeTzx98lKPS#@Rkp*8)VsG zB))=aj4ynji3-7WJ5}3NUd_K{H5o3mx;}QDxy*|r2IPg7Ds=Uwtx*s^wLc96YWE-n z#{^m$u6HQr=619UWFXuH2`QIPZI=?PDk5n`kK13A`M`3oq;vNl=8nHsP53Bk?zczZtmlhFx}GS%^f#I_Z)Aki$U|F` z*71$;1I~UMfzlhvD6T6)+bYD89#Y`5&l%*<@i48~=%Jjy2h9wS35F5pb>u75yTU}Z z*k_;mfuSgz826$9ie~57w6;%=+uzmJXifG%yIy1Qgj&f0A&X?M$tnYeC|YGXAH@ zPjOjUS%dL>Ryg@sJZAlw-@k*YBojPZd8t$_2M2EF&5^G@*C!f4h^3KAFkJA_W~Md@ zBqzYpK1K&iox`Y;tyie4bE`f;@{T&73Wcw>I2BaNU)Ph6KPS}-w^CuLMN5dJM7A$lcYZ>-;a<+dfx1~UU##6- zOL(ZohRE>y4^G4jKNN+(nzLGz=Z@~IL6?8H(Dj@j{|19*T0JE1FSmW_Fkes}?=-Ev zG;+3mFm_v2q>?ZnUZ7o+Z;=M1jqUwYed09+RU6J_y;G98KYS`2jRuy4T+VNHst76n z6mRks{Die7oVfhcz1|z;=^*%%k&hULK6zc)r0r!Shw(7cr~vEh(prPn3a3}jn<5jp zvPN~AjiZvO^BF2anNF-nT-m{ty$iPBd?;HHEL z^=C0DVi{5?rw_4YdO%*R#hyi;vX1M&J7{kc|x7sFZ!7*c|Yer`)AQ`Wy63hk%=N7qYko zPy}TN&b06CHJDlB&6`)wQ(-8sD_^1*=TDA|6bA+rStBFw@)QRvtTe7yKFNH>83Z0f z;q>rNI4>-Q=!JZ)1Ufo8WDNg;foKDAPv1gdo?^}Q+V7FEINYzfH|hU>fstdR*y+sWo%0yul9xe4A!K1mB)qc=&tZKUwawMF?O1COxJi+!L zh-3SmY3=r9EWV~wS!0Pd)PRj9WfqU}*4r z+0dZ5I@8Z1SbK9F#T<0s=g#YO*d&V(d-74T&zsa{ze?6`F8hQF{1EXw=N_^mtk%82 zu;CvYIjaF|11 z$6+jdQKy(8LC%$(2)IW!iscp1X!A#^!2)Ah-dX(fM^DaSouLlapZY1khC%5RlY}Hm z*gTqQdQ{g0_O)vq7=W73PpjOVHtHD$RFzrtcyCUO9v6xuHwf&_(99_ASxf7e2PSUe zbdulxY2p31U0U=%e7T{%bLaMUA2FtP=ML-+dh%_1=3e3>smaa*?Dt-S9sb((gjoKP z(g-5g27!+aOOgCF6cNF76d!3ZKGr?)OKqX8uB+qteLkfWk=)zczun)v>vGb2vw1{2 zH9S0{cFhq>f9#vg>d<8&E^+5B78u#`^CA(jUr!YgSS8j>s$tMC-Wu&V-792H&`8`= zb9LX$F`kH0N&Ay4qWk#=6xMu;;XQR4%_+qjp?i7SWz#nM_&Skedk5LVJMnwjUxeq8 z+!V{xlg7Ry=juBcI5gqkF%qIvXt7VDdXA6woq4)f%?B@oXVNv7GnGXN+ugsmE-yU}w-1ME)j!UK{kTi_ z31*0)q353UkU~Hiyhb!?`R`=5>H0O5UY+~|R=7$aU5-ca_Ug!}Q4vhAn_L{OM8?Ij z0NGgZg-9{MJ90i0@FmLvwhDUA+Vj`Iv01&=Wrvm8=R8dZL_?d-a@OyQKNa<=rtsV@ zd2ynz?5LM5|J35&@3dYJrknlIUbzMD5eQ@d-K;~2{^V2l@p`A~wWw0|O;j+fHJu~3 zdt|SCsp{)3Fra#t!=xB4Sl>ukSh-T{3&D)9%AdkGF3jv}Lo*uDtteQ)0As)c%_o=& z9!PlpYtb|QdYnUFl1gY*eDHP_S$R8u*Zm|c#ds6NP;;tU1ZS!F<*syLcq1_J+tags z2^StvdX+IeF+`V92@EjlMi@2qp$O@*IHPHtb2(U3U4!K)>qLcB%t(QTl58~l)A2ht z*mRuL^B5Ok&e{YBUWPz1NYUBoeq^dy=TbQGOH-9q{a5T#$>8jCoog|>ZtX~b7|``o z?EG%N0i1uA0{_gZe*DrRSTyTD+d!jj3fRD;cHT=KP9ONH=gRg%8^Yk7t18oe14y7I^mZ~JF zZU;^IEz>@iJ44{%K&(kk#;vy!k5MAr(7t&r1fL-nzVy zg-TG;^q`#$9gBAx&BX{Q1ZY5layHr{v(&hoNYHKHex+B)c~cr>yu&+FM~S9i0*_tL zak|P&!#Hbl z&5VJDvedMXj7Mtn_J@+F#cc2jwRV*)$xepZK=L8TCu(<)tuz86WiBCtoy$&Y--q?S zrxRwuvvr|`@UKLE*Ml$d4Erm%Frb6&JKIbUgU%#9C=A>+coCnXwXQ7<9Dd%Nsi_Is zo*v@PGYx{lRTM}+OVZH#^~9fr|JbbHoBKDi!kr#fq`1B)<3;3$pidSF484QV2&I86 zB;@_(hUoqk$9!O$Q1h`ygonj9CgK|tLT4}Ec_ zAqH)Xj>Fd%qnr4fr@#v>&T7+viY(oHI6EXS6EYnUe+`^raAz5W8dVhqI|2lN)SKQz z7hg3I1pkeYk%WQRV!@mLc@w9C7B&`Py_%q{YT z<@ypZgeIW4Jm{oOm{an&EeS9cKP?I(`iFI0j+8>BrE$>tnG2jp48;c_}*vv*k?nY+eazja=GopeJ0+#he7se z9XQ@TB!4N-*?4Y9Oomgel{!jTp6<_igtkt8`ob^(EzRF7oY3RW0Fr&i@Za8-E-Was z>W}lye%T)4VN|c=pQnN5X5vp1Fk&JOe_w7Mfi|zxs<4dOc``FttS>f*eMVMi^^oPa%v9M|*YIOixU^b10V?ghJdKg5Tdf5F+2D-bY02?lw4wAxJ`ANi;E zfx+uv5ZjYfxF;>l+m)(D!P}nh7YmQ)3_j>)O2LZmu`f>RF*ScKA@L05W6LoJgJ%j7 z?gqo)zXPvrFrcSvpP)3Kz+?Z2=q~shp0|c^II3z-R8)MS4vOB2#epx&w%^5}uYmO( z%O1kkj{07C3EjF5W+BXj?%}}qh3|sLu&WNFP}P$&Zjl@>T*)!%uw^CYKb%zG{zp$3 z+I`K{x70A_CQfibQLu!RqBY~+WjA}d`{+e3L}ct*u_7pJ^?T%;dhf$o%2G-S#FHjd zKis$FF5(a}3Ks49cU>h5T&uQv3`&YuTF2xWErqYYSRNu@klx?>>zn|C7r`5aKEVQt zvp=`cgg?Rv6Gi2U0B~+q``WJIM4bi(vDmMD)CwY5X@R;i2CPw>Jv?*C`aT_S<+q96 zM9Mxuh0ocLZGsG7Md2M@SB>@*V1p6`v}_d;?wIUp6MUQ@lq5Y1I*R%3q>QO zry4w~fH&bx0H2d!*uKkd&074v6uVzA99*=kB5o8|bpCwXcEpI^V%XpRSJ|aPaKG#E zNzKN;7?E<-fmasq(P;{AUYg4v;Dd;GFFlHoI~aK&2#C&kHB$KXox7eGSajPHQ@b^~ zqbP?ppy>!am@#B(78Se2+&&1PSQJ#p_R-za8){HLYJRmo^kiwQ_Xoq&Sb`<~$zP4A z&{1-kzT>}sMze_r1>ZIK`1gg}o(VuoKJ<{qH5$YvdK#M@%}W-D_1fzdf6P}vS2Sd5 zxtvfLm5# zK&{4$q6jF3x`2px1-!NcCEp}7Kh|CHJ_I+EZ&x(O#O-yCoGw6Vk?b!H!QEAx(|*De z0SgGkRTR5+`ua!!XYZ}2WK;21}y|5tC>US}q-9nDv$?sxa z(Zgt3mC6=&-YfnZf5T}v%Y)odRdoJ5k)VEGZ*BaI2yKvC=#E}N95F)R#q-{hg0=2u z!DlApjj#N?Yty2h7g>L_rV%Llc;<4kmKz3VdlOJK4}=)UJ=S79G0Zmk4%K#E|CQYJmyszltY90-FohaC`ykWo{rncZf<1iW zI>f`wXdjr`0Er|aXJhb`K?e?mAZQckr_Vopx&jHfB;K&19?x|mg0Gd@wly8>&S~RA zf3aH>KI3}alGVqGxI64?zp$&@6}!DE(=4K|BCZf?klHEszC5j=v}Khjx1E_}FG%wX zN}L3b-iKCdk75SdpIsZs+`S~ne!=un38(KXJuw3=iRy*9S{3NAn&o%t^-ksk_&Q1$u!}D(a^W|r<`b2`l>$hHb2W;Sf3j&5u! z-1^t@2G6s>wz%Aw`J_^k95BCH zDyeCRi;6NS$}(~N8^sngwNTU8WYBj1=yhIRt+~ZpnAaM&azJkfNb#qe zjMH&7grfZ}K>k7eI4 zX>R$6V8+5*Kc8Ld>ylsn(-dw=`sCpJ8osJj$tyi{3+ut`@s|IX&t1R#P7N`}TfZ-T zCMREU|CMPfF_OC0>rG|bvwL*tb}Xfrk^{Rfy47CECv%EHg(+91okL8(x=O-_ z2!XR89Y+e{W=vUYpjaYMFvS+to4~JhOzSH$(0qLN9B^4wFG%$ITZgmK%^xNkfxrsO@63ZZggm>#?z0KK1GLhQ`SmN=Tm>#!r zM-PdFy*iBr)@1K_8?tSHl{w?RQ!ske$60kspz07~u+nY_h-fIWWGM zxp)~yT9|OeL3b_J^z1KH5#DQ>)(6h0|1|+`KEdEE)edS{5M~|l;NXpWVb9r|I}lgl zdkQZe; za`jT^18Q0M;)=;nfx@f(No=6<{s}_ZyS_i=SqAooG3flbDZUZ8m>A^IaZLs%W%@vs zq0Lt;y5ox}5SL)M)5@-&rpA4&S=29;nLVI#;y#1+i2j`)w9K%*p8i;r5L2nL{@C&%G{IVpg@{k5S-u&H~Qtg8c!E-;O_{=i*jB zuYrVa2>zW!-s35)DeJLv;Q4Ye4@e$-_#yZ{)skp2hk{M|j z3JJOn-3+T#tp!ilYh`MEBBKKZSAMo_9Y}7;oz>kAArCf!oHHMLg^}GL`TU(8*7k=^ zT73Gj+!etM8dS8i6pPK0`WA9)OY1e+GLmrZ8wuNAAp2Folj|WvQ>KRiY>?V~X`G^N zulyisE+bS(_Ekpc~(XEv6ZBg25H;qT7`w2j=a7eOSA0+Z?_ob+#ag&9teNeucYh|~LB-@}(WS3B8$5+&{X%kR^L^s`IAZ)wm{9a2ulp|P ztWtXM$%E!voiDRNHzS*yljTExqA??D$|w(Kzdk+*G7vcFwB za`k#(@Aj5 z+Mq4)tLU=tN|XjY7&cla(+YV_9laG482I!!tx7!^F?K9OCW^G$3<^)gwRn6jo-Nr2!IKfyzMy(_JtSefxdO4R z)?INq0!caBzT{U^nafTM%=m2Z1Ri{NZbKjynE$e9CE%a7m+0CfcBQBd4G$DM9tU7f zd|_r-AQRd#ycMDqFC*4#j)ty$05&DBpi`%O^Y8aNQyU%HxVN$)t7CS8W;SEdPn|P$ zD^TfkSgh*whrS<(5M2t9XK3`~7T|pQd(+RkK?O*Kt^j#7E?x~yO{TC)so6cMww|Lc zmK*c)_8Y&bfXa2X?65@}S>>2@W%M7C+IqSSRdE|FIh>h z&NlSf_bjos%6(I?RTp(?B&d{9w|VqtM_2_wb21Dkrx!0FX=Ay+tCF|k`z zBjVyLZjc(e_5x3L8gpbyu&KR}KL-Ybjs>$qc<4V%mm3EH@9KOFD(MI=zr zOi_U|L-?Y4t%e$@#j*e%gpUA;9@%_Mc8)CN87v}p5dRnKj|X3WW$FF|-)J5CeR+1v zeU7yZ>iJrq2p`DSHQW*m@0a8u)6|5@TgA(>qi9FuFkjTxOO|I_$#3itDl}d1`Q8S* z#onj0953P^=eOnc3n8}?Nel>c`h8!=Ne2HK2H-c#Oo@L%;Er+Q{5_pVQDQxHUo)yk zW^8YgGvUlwHd__X`Rt~_ls#)$77<9z8YRm=2g#4p)7%vHrB%z(Id&fOxAO;8?fohA zUUR?&=y1`6VL1-Xyb{Dp9fbhJtk4-y~gZ<^Vm4Ex+ z9u5fjA%2P7-Xa?m%Tvay1ZDDXH8mFxaP|Mz_Z3JGD9}UFqF9q1SkEhv; zNf+2Bv=l5y;P3t`&%o~w^Lt<}>7Yxb%a*=%leYaxtPkL$>`ojEh@VTn* z-t|_@?a?v6cPPy<2KtT~t+%?L8PH*1dFI7x>lK?mnPyHP^YFN55V#sV?->$1{b$tD z7KNS-7tt8y60~~G7?Dk~&Zm3;;MX@54;za_bATgXvHRG?fbR{@d13QQKg1nLS-W$v zOQJ}R2}3#iAceK!iaZ%Bro7&nuki{Q!&N69oe9+*2i$*{9yL9<#0z-=#=+e|IJ?3L z-r2Od*a=~yx(E{ca6y4s1_jfPIY!Fjd@cXqR%qOBePAjWn)qksw3zyLZ9rfkVLBhj zMaEHD6v?y$Y@xH(3bn3dep|zbpS2#88%;D+%Dp*u%gZ^~@9}B04X@;W1ZiKH|#*Wyjs%EK; zcVpPA=zl`~ijmi_ftj;h@4x zSd-AAd|mLnbJ*$P7-Zc3eWx=1ZSQ~Ua_wIfNRsTfh&yO`AXowJhTW49wa=uJF+Lx? z7Tdp0M0=gFLeh+cz*3li?2T2y5B42+_@4oA-zIYD+)1@J0NAiNOG3~tMF9Qong?pO z!7~f&>ujL__2RG*95`G>rop@MA^bbF*erXTJxKKnE}DpxcD%LU3PKb?iRGp$Z4%Zo zoj9t}S9Iw3_#tVXKzAiNL`!>FzWIr>IF(v@L5=D7b;D_n46_29VQ3oWuU?JJ;&8Ci zdLxDTL`zmG<`^-uSR=(BHY*rbOg6* zcgX*U2pY&+9Hu1gH-Jb3r9i}9ri^2YQPPK&(bp~hu8CPxZ{BEb(sJ>WfLpo2hrRRE z;@{hTtD%lp3=1h-3fHf*e`!-Vi25NQ1bXevpo@OPOaO?vXZGz-DQR`}Xm?xU9!#4U zg%qoeqeAn6)~m+|q~{3U0Z^JjyhEe4d*oO#4b>4(Vya`fx?CacewgfBzx>a%~m5;f=3) z1+o`kj!KsQmHxE@ej9hocYv`gjnLLZ5jdnWedFNhtlKRwv<1nTnwrYX=>{nE`C(%B zVyE9HE1!gm^cAM=gQ<2zc3`V^y&q1Y);@5|NO+`{iFZ#(R99HK;EB1L_&8*U@Z0-@ z9k8lzGfDUi@!{1B{!W5FP5a`%Os^uK&(IAIF@Agf`C>5b-paA~Tm82EBmQ?o`X}fR2#_2@DW6BcLV*pWh?Fi zQztnB`ROxbX!$Ss@}RAF^I@Ww@lWLBz7uaRRX z0XN_^{0n+iJJc|t1xH6_PZb)}+I-@M36S^yC!PpN6~}7A{;!z_CyM%8w`a(Mc#3B^ z{35LOn3!f^;b}c)SbA%nZ`f(Et5V*F7V2_JQ0=&U_59`~wC8$ZAak|y3zHOQk_G|| zXff?Yzd6~9Ff7QqDlDbSTzNh{m^1SA=ld(`haey{*36WI_1*KR=934d5%F^vP+K(& z-PT0_10i^qn?-fC7ALKWNxapc;hxJKU| zl#st7YNycW2|MA&V3>i6$O5EcqEX`ZhS2Y)e89^5D2R3lJFrn7;)m0)3l4xh4d5Qh z)RCD#)n8SEEZyE>5O%a-Frmc?>Xf#90Or4>-j4qeoKs;vq0$Hru5}JQD(w~UWGJH= zZT7=70rM=85fQYt>_O2ZgEnO7N1qjZPAVphHH6^N|Bmqv!Ti0f|J5^ervUCRyTRpJ zJxV5>eQD)tSWNhNXBQ#7Kyq0lm|=PTl%%HwmGmdaLytwR=O=$o-(2aN8=jj7XGHEO zO{5>9v_r1DprPo&_k+5QAIrfPOBlry(u(NrLD23y+1&&TKofDxm2AZ%WOxf|cJe!} z${*D$7GQXxV;Q>{eD7hjb?#Nc+JT5u9tRfVG|nZjQK-e|)l~|psIu?vAS{#G&0m#WyTc8kFY-|U)F>r!tVc-m~=ptT`FU3;lNf;@{WeCn)+H9NeH{PA0}i` zVDkn^Vk%8O*YjB#Afz#r1I(1s1nf&Ega_l?YTJl zh5N%K*9)$sx5Zv+8*dA0ym(!Ix<7$dBU8vr0w|^(4PTvZ|B(v5ahTHP@rfEN5SKHm z+v_+gOT~l=Me}>k(RTz>-7JoSPHbf+u5IxtT_;KzkW_?BUubE=u`o~+N-;mi*EnB! zp7N^UgW`%|V`HP#enI>KaCz{U2xRs^Pf_h=KE>W&J3k!CZ4dxry}Q-*EbJ$`8Jac& z_>S>N?ptoJbNeF({cG;>S^a~>jy}g6X%afL`rvHZG0eQ>^vs;(01qSySAvgBen2mBLxL;~~mgfh&7yOcW%zS~s?f z8h3?RYblemEL*6}~8LNScWf zFK$*3>2jqpJac0L5MP?lq^Py5Hkp!7fwf93;TYgH`+nsR`xIUJmDo(ZWYNE|ClbDj zogXh@kAr%7?N`orCb`a9_(Qe$j6l_zPMz4o5e04-+%z;w3Ir9TUJ1B%Yn?%rQ#Ciq z$VZcn-k0()Nnfu2L7B$rLT;O<>m01_b8rZmd&>qI&<7H%br)Cna)aVVInm+!Gr25> zyyIqtcCv5lT4i}UGn-gPpM1MYEe;10-}+fqla~Zi9G|}r8!frX=`>NvfB$h9GU$9b!VG`F)2Z){z6kfalrMM3$+Ezd);!AxWf<|n7T=NwyeA%BI+G8Tb zXc)Q@54tOeTG1`cJ^()E-2jdj7mr0zsIiHyU)G9%?sSw990l*kq|@cT4cVMk3zb)H zmDvMsd|j#fS7TgoeeaXe-IXQOhPo?qWf%0g2i5)fqVGS`2~neCqZ1weviMa2PM=xD zqb0xf+ab4FWO<$&= z6aTY~_s+d&X$z=W?lqZ++Jm#(gIY(uy%;=Pk`Q*I*u^gPL4bHVk#mkpP!{@SJ_2j{ zbNEjxx<&-7r~e!dxiIg!AI9HR-4~kE zKGRld@-##ysx&nm|C*uu?K{_kdFY!V7JX7zdGB=NPle)#^v;yd9UwHZr9x$IyM~60 zfSPK(X2z25$Cmc3+Dq-23nc8%x|$=Mu2z0j9*r5Vh-~HV1dBfB6Y7H}Kr91jPsz}t zK>_4#*^kDkr{ovHm3O3xY(f9tDr3}zb1n}{Sy706-tvwOX+jTR{twaNNW0@4@nO#) zE|Gy0vAJnQ5SN`L6-K23R6zl@N}ut;TgDefTds8jP-6}d%lmCZON-V3h__59zJtC- z?r617AqoZWjMUCqOLPpyrCA?(it4ZGjadWt|Y;2keCF=p@zMoByV04(rT+41g- zaJJk!wx3V)?nIdsNKUl+TO5$`MCmk>z3(w$f|Lt@3l4DHZph!Myi#g^`g6#6-8UCwANf?QQ`49OIKJdG4!x>b5E zMl)3uST?;rzw4Z|8-YzkR`4u~crO4Nsq>@nnj@z7)~&|XZh)e?v27%`1w)p_O8jA8 z>sM~qqx|L<*5}&bLT_3N8l(l;_y{x>Gcj_TPQG!-xMi}&%b;&mlM*03| ziGm;`K%GzVo&wO3IB?J+L+@pW?~bLm6)G~PyLi0m#ptQD3$HRGh+0v+L#r}uNfhSX zB>xSoAusI0;b6VB3axOA7gj}zL;GKha zIPs*aJee;?r6X*COF%a zQZ8?I4Zzv~m?6pbFd$60UcXR1P3{v~%6GUJ%oSMQ0A3(Rd~aU>hp3dBFW+8FRN19y z3a^8(BM6X@@~#D{nv$qF5Kb(T2oJg!T7M!pyP9xSe*bPwhzknnVJf})cikcp3U z15GB&Ed;50642KZHxM{U2WqmOzxYFrz@d)t@!VR;6Z@-ZwqpoNM>i(G{|j4rh~M!W zLASuQjtT2Y7WQchqo|=eAML>`-gG{E*moU4Z6ECyJX4Wm3u}qP)n$pJ)v6z=IO9Gp zg^!md#YoeLb7|%11RlHiLz9wH9lsh{`1wqSNc8`aWePZ0ie%xo?eh{`zq(e>TvekH zZzGT4-Q#2$vmv&4V)`8@Qi%>;xuBH5X1-kwfc|eY-zz8b1-MFIDUH^J=wzAP)Kcbc z>$CYOKn9eH0jk#+m_j;$NHHLbv#^-B{j3*LgUrWJ5;+L?P9ZoX^2;U14*d8~wgS0k zgGYr3YCXgB0`IJ0J_QVf@LDaKn|uosyLr!9vm7~JB~f|A21z5FukiR%$v^8Rp(t`t z%y;WAJc7LsaKa)l(DogII#m|*5B_s6r?dvei_=I*fDdZIj<++?9&zdpI=~*VCTrlI zN1!*ZvI%e^3ITgqBWjaP5NIsRW`5Ke0eB0owX8WFlAF<`6*IzzC%VqMgT}6@%NNAl z)qqYQ-A4f2kw*@IN$9~O6rl+NaFVos{r@`Sx8P)O_iNpR35q~ocy+Lw^)1`bQbw_> z>#+W0X9ELf5r0UmjM*4|`O;o3w-+ZWwp+$u>TjcBI26i zZ~eZv>TIg7^P^d~o@V{+2HmvDR&o-f&TrGT=xR>QCNDmVcY_y(Kg;Ml181g8TI26c zU_d|WK5uOSxUuwSyixi#%`u7FI&Vky>|c{5n(BMg*3o|v_TNTzH?^m59oHkNY7>Jv z2dj*yJj&oHqke<#XtH*3aq$CMxU7s*58A2K2Lpr2+K=(DY=<;38UYs)>0@*YV4ZM4 z<;2r^YFb=dAe%-G8U@*`_?oJZAKa?Gasi(vtJZa_-o08UX?zFNU@`LH4n?I!>? z%Al36ZBK<((W+aJ5UXH<(6(#fn{spNM6>ULadB~s`$*tPTGoqDkAA{!j6mxpSG^0P z)70<*X@#b#W`A&QrO}4slfUfJG)rOtbk1kx2irg)3Wt&nAKhb{qI)h8&kO!j zK<*I}H~#(DH_L0bvkXL2-4_bAv3x&gBG&o)?+;wgcy|LnlKBJpfqM^oSHSb846Xp? zN5j1eK)-$$ut3Z(9ZsO!!l6(5);p14;9? zK)f!{Sa0*je`zj>Q$_MIa!?_j_r;!-08P$IyIB!p8e}TWet1Q|wswP2^#T^-jywYb z;hjtHA%4Cu=``zYDYK>boHXbb}})S&KX0;WaK!hJpT16qUs zCvFj=kq};egZi!2)KN@A4a8w)(SO$em1O+n(w}`rKc1qgshN%ONzZ7lKWPZ0&st1X z76ROlZQQXz02Wh@v?SGfnhu5|8DD3SKn-nB1{tHoroFMWTjRz2XX9X4NL7t?%4HhQzeB^)_um{HyuRod%bSDeo&3)^(8ZQhA zA%FC*pBL$npm*QnyM_5hqoXtGO+Ma7S=QGMFY$qLmR^CTl?#kdf!_f>sCPu*{g5q- zJ8xKKfDG2k>el2e#rgHmCBJz0rZAq^jnXE=xMUGMFYt~_^)0Kw7Wo!gZ%>uoTr zg;XdEbo|~ZSg=%QFltckc;oHI`5X$mPc=JWf8s(|4`tp>+oN`J{9ID*{CRI;i~ST zoh_4&(DPNvwM>hwc+*$wto>wT+KDFxeTf1`>G#X8&``cusLnkgPp<+w~-5`XOI5jd4{=T=9=sJTsd>!6bZk=rNq|#kQ@rRVF=j8 zAWqzJMS7x(;DRDn-uvag*S5XN+>?LQkcze#fm>Et;=X?~Dnj>|UqTv)jd@NQ&`E9J>(* zI``!Cu^Ap})?^K%45q8>o41~stWrES-ui8RE}uWz;VV5zjUe2DHPh%6Q_rp+ivr3# zRp|?Sr+!ve~VbIjCc!sSvNx($3u_vaJC_tr~Ssm|Z&I1>jF@mq!LayNCc86vCW=;Hhi$*wUc$JD@-<{|3b?sSKwKo;Tnh-ht~eKb`@y|HDW~ZA-?N9*UDo9B zW%oMmoP@uyJC@oPXaSpc9QcQH2}L_ummK~(fQ zh=N2Q)X|3AuKOPfJ_i)!bmjd+!A3yAbGx|!oCkLUAFcaR*}EWcMSecsy$Sp}-e3FR zT?;(Jq!<>I(w*ziGt+upjE6dpS>#T2+KT;onolJYat{+Th0eas^Ab>-Ia-FFOL{Q| zw2)t|??SPm-49N181PxwcWwB$*dRFXbkk&3AAdRtinErx-s|uT3yjnRygASLN{|$= z6DAs9im`NrnSCepdJIMHqSRb{&f!F2Sz&cgsh>gCTJ$^lg-2LU3yvpgksTD>tHY6m z|RhEkXHVIj|m_hy7hm_w}oV8+pt@Xp88QbHPFw@Q-}FT>6Vp3$@SF^M!(wq{j4 z%9x?KGmost6mgrPZ|b}2NVGvk?I~0mNj!i1t`q-OKRby-gx$xDjmAipUmrhh6Ud|1 zhZ?2pWS3>SNLbi)Pkql@>O#>m$YaIvY?#aB^=D3@0!bZYA>UCp2(WLz7llj#O(1DY zaBY)d-onfPxTr6F8)oN*!HB1kyMbG;S#TX2%VOODh$dtB-;Ev1LI%@tb&jT98$3-Sj z&iL^C+)>9f5Ajxl36-s}2iLZ_=)S7V$by0smCVGcGLqGsvrS&{`k*YM8XSlmzbrB} z+EkQGYb8su(1?CZPJEuuMcwe5}^C*y5D@s_KL0Oj`E1fbFumi_x#*Fj0;-sk&%YOyiX^q-A=Y z5>BeJLOSaX4Pdv#AZgy$pgSGzcZXbD2hyjR!zY#>_wMo~oi`c$P8jby1knv;-Yx5Q z7~#=d$mFr1YMon^P%WbdyMHaq;u$f&{4RpFX*Qq!Z%=3R^`u;aT1HeRPcXUN1REs4 z?$}^ysWp8^p;dPW^IzCsF#faZJK8`Jj(;5l-YB)VR)9ZF4C(VRAMj(_JZdp+F%$j0 zhbqK$D(c8PjA(0$MP`@E@#V#L(#M|P;fR4G$_3n+F;lO}(j3Uha}hAwmo_5yFM{7* zl`t?m4TUyRab9bxh#s$28*vY#cxnkwUxe6GxF$|Y<1;YB%hmqypetdHnNPNM3mD4u zDRU2;v?O{gd_+FB-N+%-0FrmM#Fu)=1PH1|15X=y7FCJMOfA1v>wDm6c8N0h*7IDB z#>x%TDA`|?n}jW#>0Bke@cS6cD>LtdES9meWNQX;J8=N~`oF9q-$qbS0t!4xjzfxzmXrieSoI~8&FOZldrsrE!*&@jY!?qdS=#Hwzj*5puV+!kClhFI9evkk5!>C9W~42QFv zSo~E{peSt6gr=9M3S>jBNe{z+58{PSSZvBirRQ=zwlW|aqvhhk>ct}K&dCzX$a_#J zA2U$B{)JtvGyi!jY89p%!-Mi2)1vhZ^Ie5sm%tlc^8S$$yZP#B*Z5dQEYHxmXDWuK z3e$sO(gc(-bgQW>#x`F8Q{zD%dliDVfJqkHK z(`KAl^`VE}jVcWTYlN006{ex}0{UOhAMcczeb2HLP51;?R3YN8()}%`!VwPV81FS@ zT432y*M8^abNXmTGyjrFl(H#4P#L=F%e!EqEFBY*{jos-lO>IMZ#wPSUi&+nU2XqG zTqvJLNtzAu@>8HM-m#8}f#tsovG}cf*)SXG?b~e7#lM`z4pSu;G{An)+1EAW*hQiq z3?lf{S*t@2wqCP}j%41w>d(n9wj3QXuln4hP;cJ?T$74|=^AlzBKB`(2KeCI87eGC z9wFAk&JHgsw90&xdP|j>=!^Z|c5p@67O&|0<*x*Hcqb&R4UhzW{i#+hBb%wWwODmJ z827&1?!U*}R1iz-OxE}^?N$82x_#yE>gniNeCmVRuQFP{*AqpU&OGIwU;ccVaHTzP zI_#2#Uk?`M9aq*J;MsWq7S9ptoT37u*nH^Ehs$fQ<)aL90(~xAOQ?UAvjAGoq*`|} zXOPg?toJFCZQbm%#jxz5ld=YzQwHm_HI84L+H@%q^IOTzIn*>SDnD zcC1T5DQYGJh3_aIe&4-ssZnata6oaMbN+ZK+n?&77972dH4X|{0`GULL`Wu{k5~sk z(UKGMp|pEagucpmBK|VFRE*EaTyca2Wrm3?mn(8|GKFA_%d5xq2irQQ2_gev=+_=K zynq0hV8VX-$u%+{-o_1nBO3KY{ZTBGUXcCx@xCh9QVLd`k`9Q(gXQw&^Ut^_V!tWN zBcASuOnC3|bDi>mjiG9D6?LgtXV;sIEHBv`O6z0{%{48fW05gwtE~ta6qIUznp1;Z z!ytjgrYsFkk|~bp5`eZftcb>iX4c zdv{(ri+koL?pNEtCJZG9gzRg=g5w?WwH!qf1P`u{$G(>Gvb&1=UTLvJ0DBUtaBnm1 z{oe4qU8>tbwaak2*zEzMMj83P~qI4itP)?^x|4Xhsg`}jtVfns%8%SVOqKf($c29`4|tuChR0z z;yvrpV0f%8hd2Z+UQvqtfU1dA;=TU96>h9E8N`{12CpKuM!nO}4}G>IlMh-^SdF<; zU$(FHIr7*|74>BG1lUO+_0g%OMJn3NOVcH(P#0T)y`iPflf3(8If~w?k^9L==%GbJ z^uXXu{ym`jGqNE34SLu6)!mNfS_<3tV0 z6?3Sw3AXY&3!S!9^TamF0$u8fk_P>&r1RUxop)_4I5t48a16R9k6N7yf` zug4-PhDtOUdJ?+{m1SZ+-De=9;!G6wo#bfS`xp){N-z97;?XgmJ|?E;mm2>UD%|^Z zkL^CO8_^`47CbmivJTV;7o9x^oAEznx_NkZKt`=2LnwqyX~2>TeAwy<5&Q{Y*%BTb zJeZ0?9)n_1{mIEN4*uihoao(}$J$7V-HGa*uBXo`xdfHfwwg)N-ue!7=vsI0D-4CT z763Jcgr6(!$~P&9p#mk^W>Pr$mjntfK1X5LPnB>q^xf&>l;9ri&Z)>%P_;Cj)aXX? zdy+=hG=!pyZXG=mm|5$sQeRy)6gODEr!&k!t)&Wo*HRoEBi{InsK!%JQ#MhH?yqjT z9Q-O?#nZXJB(aR{eDI#S?qWAV=X-w{Jqy>QQPNH_U1ecCfu>>#Ny@b1Ys|ST9AQc! zNDKq0M}bMy!U!anwO{b~W~(vS767a#sZbZaNElw>1p>T+(|ukW{EG(rWuur0v{lJF z2t)lab@m%pk^!@$xV;pEx~%Jn<(86_@um{Ww?JpvXuA))W`y0x!4JDYj_E#mI$wqD zSDp`iG9UsgE_!GFIRp5bZ)rCpe2MwF|4!BY#*t$2?X%5{?6M0{Vx#e(ovdRn(`C|A zmsN^VIy1?W$(K4Sc>DtfT;<)q{?Cp`$BYVXy5M3={T`&+PeQ$0-UeZi zWoI0i?^}RkEm3o{VClnR!Mxk1xY1yy2|_(!gZU&*0Z63*r+^PINn=8U2=vc(Pgr`ChD7? zU;5ossE~Cjv-i`MY$Xn^Dn#=oxLZ@GlJZ5PFbKs5&q0LL^}CB4H>I793Uy4+v7LP! zW`XR>b~XC+kg~S+ZnA_oIk*p>wY_Ym;q3(Cz~voR!B-W3I=n1G&6F3h&83LUEJc}y zE&I3%IA@4}+tZrguL5RQ&;*bYB+ps}Z6yI79V)cq-p`f@U~Y^Q=C7VgK@dy(6J?bE#s_2P$wD4^a6pksrosh~4sr0}p#S*JckW zNC(MYJ8kSF?3^h|M8J<3%@1tR{wPUk%lJ#4KB#vCxF&y&Er%biwXG46@8^LRr zpgB3+4}}a}03!zAri_iBw)!9ugAAsJ_wLy*0+6z627kxnW+MZm3<9H(+C}+w^oQ`b z0aMYjzMq0J3*d?Gp-Cu(?nAxj(7XCUZPG38C1~ImcHh7g{6LAGY9=njKu__Y==g9f?($cn?uH1u*i6^VwNzA+*=HE zKcMe)0ljY_8wYlrhwvUW@GG7r@Py_<;G5K49l+271kFI#x9Pz9f2O47t%M>LNngcb zuo6fDEvN0>vC2v}IjhbC?UM4O2yFvX*-l$*FySy$xVVIgZf}p}J$DU!(~!P>&i@<| zrWWU5@NvIqd$X&oM`m5U{Zdf21ID|6uPFgv-+EE=07kPe>M&IAz&9m^iLeR%F*PBs zcnymGeaW0$p&SGlHx?km1uI&}AKya;G#S4RF~J`5kDHx=&(gwf$}0l9%?VuR&P9U` z!U50}x53If8$Fl*#|^Mo{(akDO8(`Nzw&mYkN)%DUo82HlYceNUv2s?)%e#^_!l`K zQ~EDX{>90^IQbVR{{;+xaq?f}_=}T&{qDaJjK7w`UrXVyrSR8M_?K$@f7MbD?ncSL z$A8A4^1xar0Q3FE`1XYlEO~nqp9U!m-$T0Bw_pOj zToBV2j6?RnNt=WnfY^3~C#vEaQn^YO&!%)w7n8Jf)Ir)~(|K)T4wI_DTq75a~D+~vRk(cr8GDJ_ILGxwK%hcF6 zkxcX&j%4=a-MmeSsHhB8$Jn+HS{8iX832$}qiKK#6l& zaWBU)sI!5_;Rpsb{(Q^_)=Gso!Wd`8lRzl}e%wcE{0CbjUwjkS-T4|!4$C#qwMtjt zx*v905;wm7xFNs5QiK~AC^$?r6!fi~Os41kcj7Gt)eoI1B6F!(Tk z*+1G|rnK(dUCrWcyRLFt*$r2An0YJjGk@B$z=};HU80=2tk_fkX`Ko4hF4lwlv5`&g2(2SqkqOQ^-ln3PdY&OQ?Or3lvM zkAEasaP|&78!8@pxSKp?=c*GGb|(4L%W1bXYJP){&~N+F)8rDqp6^RDTb=ACTB;KH z&x$t&+!q%$QC2R`-`=_nhtLu7R=6!T&XiF4rm2F99r)@)8woTf;ny3;$YLQ$HIA8} z`Dzl*t;t;BWR84DRAXN)@G3Ras@Q8WJGjN6Np0|YM#_Z>yW~tZ^KGxmc|ZE5nYH{B zKKx^y8vU2CvjzEI*IMA4*p1dstk1r(w<57mo?)t!S5fht_qETD+>w|m=3N==M)rIx@GTmj|(39ms@L0T2^~KJ>rNvp4|<&9N`(OdGYQZ95Yu zRudU({rqG?c7st#_g!V8P~Y`xKWry^l8h~ivv^Kl#Hh|2k^H4M)?N%EsJ@smrCx|^ zdCvnd`rB|0VEAjFor59DBZuJM_6{t0JXH7zG|l8+_gg&lQ#^{-9)7Cs*udt0kGa;& z=G6rI4)um_rOo{BQCXDh^8HBGMpq1e_sh=U7AH?W+s5zA*e@N>eB~P*B*r!~ar0&_ zI^+ohNVc{y8+`EGeg}HTVQsJ#T$kmTe)F0t{mi1I=IPAUV9y8@1#_9NO#qn)FakPH*kYp>lSM2{#c>1~WdyO>u@ z3$u%GuFH-j(><#GpNf8?_cM{cIduPmYjon|9r*aDqimw3MzRlevAasVdTUgs#l?m% zQbGfDqW&0TsAc%rF~Dql-SR*`^!^Qz5RiZ3V+VfeS$KXU8m!QoceHWTN!>JG=m7R; z40ZydA^e%mTZx#ONmI45sJ$DL3nRU>ReMqnmBPi&A@jWse(IOIA;P1>uO;2> zC`AbqLXG9$TTx;hj;;lxwd)!(i=!}OdGHUvj zJZH>q-YWc7_!)TbgLzO~4#-2~1_y_uZ`G&8cGLV#h#mMld*>artnqkbhL=Y>%c8uw zf`=P3 zpzHMmw8WD$lljkNw5nPyF_s!cTh4DxhTXnjL{#>j^m?-A3hwy?#P|<2RTZx_Oz3DI zMxb0yvhz=k@5C*8OmZucz1o+V*qe7q zkVoh1+_#$gK`@dsPLRC0hVk*DfcApw%57&gnbm1Gmq}oTl)=EAL#6jo1t*G_IdNxQ z=LoLogsWcq*tTyaHgBD(KP{hIE6Y`VJ_}_;C7wySMT53mERVtP75;RIbSu2gRFuWh z&s`6@8fAXV%eX~-A%>Qes~OzFOJ%25)#baM(kmA`$wRF(EDWlcE+^y3J1nDpESEfG zDdKiho~=i$26`?O;VT6B$R9h4rOFBfX0Z4y9;dG9A759{GOiaS=XI}8lU)RGW3}c~ z{}2@P9c{GNb8hdzZ8>8fv||;V`Lx(l@4TITeqr>nu$I>Byy)KRB%O#h=G{~2McLz1 z|6QH_pr};#oij*XY8i?s7k1u!~OJ59vmL-Wapv9bXeu#BNovjUOQC8ixexYda3J=HczjMUoBJm z-9<7rxqVWqV;^8OJ4&WaLg*-TI$|5E56%oFdlHWwdJ#aU+Zo@!HF3pPr|KK*)yO?{ zG&ks*#g?z6IsqNO(Fv0k_5cjv> zbf>s`q0SC9B4QKti{H>z{0s!f^UVo|cQ5PY(azgn%jF2%6Q!l7cAax8w%6S3pO_o4 zLsRu#WKOP{Xn1j|nPKO?#-}wuLwm2N@-dS?7pBK>WTSOYKHaiWgCqayG2RyUegIml zhnLC5h1IyF0{4R%Hy;6=)%vdAK-UG#3Jj0A3>k62Ktdh}YjV&rOr4Gam?I+D-=K#u zWRsSpOawwr8U9Xb*lO_w~HI%@{s?&LX0IUaLWI2rX~R8^NsAu^o| z>GqpFDA*ga)W*(gL%dQvPQe*maBgt4Kxfn3DQnNWr1K!T@^O>JqQm}Se7MaaQSrV|UM>da7*cHywfo6d4F*$INI(uVWWz8xiWT+Si6 z_fb*`-?D!q)y6QS1lyaldj~2hFMm3h#Ug3Tee|Kyo@8dPj>e;ZSQuYcL2C7W$-8eP zRqB~btv^-GdEAtO@BNTJhz^GFsq$ufK9k0E_+#pOk<8U}a_zFO^faFyaip!CU z9SUF-6wQ?LqKD_oW=P+qv)`%FAUudVE8<^i8#^{(6MI=C(z^EwgW7^7yb{H^E3vY; zul#Eh+pIAq^)kgE0dB?Z5RQ?~Qo~5Lbnf=m*uCEG?jLSUzQ=&3={mL1_(FPl zcCh7A+=)p$ot`>sCC^YRYmz5<#(<4RtXJP!9spdN2!j?XlUT56$N`WQeI{p z*d^yGpIRhm_zSEwLMH68Q17qK$PK@&)M^s2|EUxz^)wJKBWJquVUm$yy_3*+WgL~o zcZG2U#Be-%X^kHlOyYwcjV@C&5B+GRnJ!b7hn}lcKk@))H$$Wj0~&AY4vgp<5YeY= zoR)8zl*nS$C^xnlHyp*Jo2yiCR;G%Y!{>vU_>1}tt+Lj{oaN@PR{Av;AGJm~=ja#+ zJyX^;Fh<+_j;L zbr|vDwBT6H#+}dnCwWzM?7hKLQ;l@*Kp#EU`Loe7#ItR}?m6$KG{DzaOLsKeye}m%#1Z_lBMT55|t;Wb3?O#X^ zN8{%#wA1Q4e|E&F<|sU1S5Dww<5X;&w|QA@i&7IVET--*$gXYXCZ4=NBBVvyO6a4C zKE`Lc5}qp^Il;uXu{->f-uNdHb%e}WrKftB;Nm%2>oJApr3ymVLS*&l%dBcd>4s<# zqS1?7zKr6Y_{#95>SyTKiRXQ4$}v;DmBba32AZS{vYGcScc}$A22GR?)yFL;rH6~v_?+Xde zh*3xnD^@biit5x`=uRbP9Uhylx?bMk?hgiF*1N8ZMB&`nGO2*!{qOF9GA@XmLBO(+ z*j=iHusmPf+b%Q_Uz@+K-uNuIGsaJGaltTeqVqTzXQo>DG+`+?x)43UQ-AAic9GV} z^E+9Hqh7(ffdMH6R}$yKw5JpEWi5s!vR*lv1@{L>NIrO8RaalO=@v1niWxt^-d!g0 zAA4xY_ri2F;c%7Y=tDU>)+Vw>Q}LlN>f4NFskJigJPfhO(9^Szz?-^o-0|BQENMNB ztE4?$5*${(ZQB2-@z6_uDtR$fh;e<=KlNz)!-e1=DZ>i0mQMPl;ZMt$@D@~BOq8D?eX6J$b@v?>rgMm@{F6xqrw+Z<|VGx0F< z8mhz|v>Xx3cc8M;b_NmU>;=PMIUe|j#u7axFodv&?DoP_d(NBYXF8zXvZ_gCApmDV z*7RseWWCR98?8POLCs`cnM+1NXo!`g7Ar8fQIi)n%yOt&x05gba~t z!%p@}WbyCd=vW7g`QEJ1&7X`u-xP8OV@K7=z?R5yVAlRoHIR_Y#WAQ|w%TUBcEx^% zMV7B1+#uXG?WIj1S65TABko1p>Ksn6tN3ckqC`a4fF@)@F>_sRGCsq)ZOZtEG0FST zJN0_D+^ZPNrYIjQ6JFM7b%^#K9QZjRmF9XdBcXx4e%+aD}BvFJ$4 zA8u~$y2=+;&y-t8PgG|97)r)Y$@5vmsXU4cnxbkW_%roVD!Y`-xl1EAqhw z8}@>6;WmTqc(Pwg?j%j);tL#=*RKX|8hF6rjgDiXL})&8jYquVEDyvJABPqJ%4K#tE5{p2cyD5V$+e>q$e<)IiB#B z({t zi}dc5>I=f)*5xMi>1!+L%ado20Htd{1n4iy`-A#G)X=jQtzd!|i3S9355>_1G+)WU zMWOBH1mg)xQTeJ==sU*U!}M~f(GyjV^f(_)p(t+iWJhbN&^Q0+@{UBWJ-9pbv|L#N z@J-x^ETvwzug$#1cHEHH**xRjY^;QLtiGHp`xWc+F=D28@9ChC< zw`Zal(^nsJI^T1=o1@lg!S=xUJ=p@R1scT6#2|pze6W z&{pS`VFU3pJy~W`_PX>iqvzFF>7d4?kYwp%#*xi@(4tWQ-rA#zua)1wOf%mXuv)Dl z$>-eH{HZcg&8VVVorb7PG-#KYyrSTiWhQGVQsXJ&swXvN#>c zJ?g6JL#}HmuTN^GScF>>^0J$=isCBU(ctT_7_q|A5zI(m+x)4zR(8V@ozEZo_EWHy z#SL-UZ|K@Eyz`ThRH00>*EK0|+m3mT*}1{X*_)_|iIUO8vaUufxK~gZmitJlGJNag zM?+Qsmlb=?bp+DHlXSF*EY*F5K%`N(eQv!B!^v^grtF-7A_EJfLO?hjt?3YHr<+h7 zImOM*fqQ;B#>qdM*KM6laL(;J0=0Hid)v-?kM2oibmzf`*VfJB_lrctHfbzL^NcP! zuh?7s$x7_S#LqpaTIQQfE3JuEL-{)0Sd_OPRe0a5@M5TBv_H%A6MOM!iIiYG;hHty zJpyJE{?&_|6i$n6x5aX>6YD@e6>& zbcH|Bsq`0Mf$`*WWdI}!Bf-(3hl}7uZR!*zQILC9o{?Ncd08DCX4y@&jDCz&b~q89 zO=Kba`Mbqx^`tw6<^5%n*3fKc;W}!QM{W%hV?2sjy?Z*!yv&^_!j_?E;+4xcHp|8F zp3@{lkE*U4uizZRt9rjUrIIOjbh>@M-x~y?Z_1)l_^hrfkuxZ|8GNB1@rjw=&!_Mx z_Kd1oO@>TtK9*}Rd3w^mm}f<$5UqBY`(uS#*&0GKYuGu` zVmX=J3{@9}S03uThF?;=GzLgK@$&|aZv^{a0YC(a7_iE}iG&? zx${o=OyU&3vp+{&xZz-{eZJdm#QpYRGZ}5balNN{)S;VRyMGg=LP_cmzuDYRjXOP% zOxAwNZ6fn>%@^D8c@_TohUIx?GHM3&$$#-Q9G5&uT(HC8gmvoY4Kh*rRKV}e0GvT!AYQG z{Hx|RwWj!jT?mR`4T+q`))r6?^>NGb-7CFU3!{x$6HL0~PfrNm`?8g;vD|s9i z6k2b71w#EqX6#$8u&4;Yv^4X1e3<8B2Zc8+yR}$BQ~jZ}aQ>3D!gHDccCTXAsiPNm zQTX(C4*Z#D{k`0JLb|KYa^*7CaD5}X`k!uVByE@XMTkf`jN`d)Z5!H!G&4- zbOB}F&Wc6VR?4X1_ezOEcY|3YhTP_*(`b56i;rV5fA4DDGd_(~56>rxfZ|L*d z7fJzzy?+c#Qx!h}$T;GkYX>+8WQR7c_qygi>Qq_Oub1R|S_rS4o+@e>Wgs44Z4)=8 zUX|KDqN2+RLdmghc~KDOH|x6MdP#uWN_%9|_*i_oMxi1^i8K9Ya`G&RT;P0|_e3pw zM?i4s``N@I?m7QiMwFF{jFL@kdch}4JrjtlW($s#gdG-7M^s=D1J&m!tFFv}mluXiSKKJcjF*GaZ{m7xv02G@wUdI4^aEbMyM3;blFqBa-IIpklqPsV_wNJ4bb~yY zK~Dp5%_^~o>9NBFk5@g6e6_e(Sk7pR%4u3e`_Y?9MR=_&dLCo%MsGg!!)nN>Ke_xp z>()YOr9m|4{$yee(V{Q-Y52NcbDA~@MyL+IvEi6*I*LckXc@Kd{l1jRV_8y?R+>x| ztDdmI*|kgaqZ%oXhWkir^pnRF+V=)kxEpL_MJq52EB$Cn-borgH;8(+x!7_l*^g>R z-$KyOqK-4;q--RmVFyzjlxToFjFE>=Z!|>^9Z2W)y0FpTkS^>!(4`N1c|lC2`3r#* z)jM{qRpd>J;g~prLq+^|vjP?MXIS`67B!Y`&Z<-NuUB3bHkB3xnq>gbz-*vjg?x6S z#cJ6|rbv14%nYlVI4lQ0yTnjk8qKyF`^qxkf^7CD*;Fvt`FlB>6!zaT!(EWcz<#JsmG?@xvi*yd}c&NoOGk0*t;pW?b6!s?)RDB{ffTzx|}HBgCauBQ6dS(?dW zYljWP+Zc<1nJOBQO@|3 z;4vSF$2(q~&SXw5`p7C6pEE+&^x9KjbymcFmc`-flQQ_CbrRgY>!awi_Aj&EX1{Ukav&fdgU?UP(1)@^QA!d5C>cHnxH(oq1#>`m^Jc zr+m***4vp36=Hv#RQq)be+_BGIs<3c0Kg;?28(fv$O@LBW1|F~0n)>98dxgZ8{h;| z#O{p=&A|{xpa7!6#8e&{Ue!#>aNLK#3U}s)zFQEpB?6?>mz@o{Zt-SU)rc(Of5J33 z;?Mo7oe8e*&S&coO_)aEOJ6#&=nyMVtoIwESvWXfA85*- ztXTC?6sL(rdk1p-iV^F?3;I&P@uD_a!YhkOtglx8<;j-MVO94Rfqp5cizPw!7E3l` z#mPYdrzx8K7CW}c0a=nQyYNaI9)qG)2Y9)hYYrB=FA5s?SsaxKdd>4@Lh4Fq71u_! zPO}Y@ApDyT_xOd(qy^*06>TTiBoYD7-)Gep-8DAncpq*Q3kL}K{m749yfHVLe?uh> z0(Ps?FqR$yYWVr5)0+#?sf#@?2#%jw#S%EaN6W29^?oWia-6MXdY#Bec&Hpfv^F-; zgyl3}bp*0P<$)>mPcp1BxCU>)zG$0i565`4fEn7xMk zy|l734WB-A&q~%I8O6O+{UHC0+TIJ2@Uk2g)WyrRjv2&XDUk@sZHqjhwiB57#I$#LS6luz<^Lr;I4HxUrzz_9Ba4kRPe^}jEUj`d zEYPncd1>AQ;i0a3OtytxEmjRZ&(JCYnp~yFge>2OS3dqSIv9;LdRfaih22!5jY{o) z^%kTcC?eF$fV9SS*(AK3u8Jo*3cj=?hQAA6k$i%2R&MchLWGLxZp<0Q?-PDFoXnC8 z3#CE06HA+tYkU&^`R^L?8jg|gP4THlfn>Pzw&n3`%D&``;f-+s7xT$ z<`Cu#v`N(P`t@-q%$4&BY=H&-pufbHrr_2A1XfXc#G z-~p%o-Z(IlPXP$CO&^6-JwS_agL;%<;b3GE1GTVB2_kTy9?fMC-M#7jCJibR7)&m2 z9ss-i<~|o-Q7zFF>A=i_Ch&kOyVnS?k#T{MP5pMb31RQkE!lrf`XgXAG zI{%wG8-!BekbaX^2S;f9>qWxaVEis!>oKsY0R{@cCMCKJ8`*O(GA>uL8?gSz$o}C3 zfWjMp}{y)|=q1CUo zV`m$vtFHbREe%x)6Oyy@9xATp zkPVBf{C8^tSRGk#P=%NC(8#C9n~Fv-oi1zxbZ-zlp@hhP%#MHD@y8JP^OtfdzUH~jl~(0#(e;PvVVs~rF5EB_AkFGc_I=zm3lzryqv wp8n$Ke@TJAn(42u|1TNjuTfGiHFpiah&XBo|0M9oE%5J|xSUv_$m@6i4V|>#HUIzs literal 0 HcmV?d00001 diff --git a/shift-left-demo/nest-order-service/assets/order-service-ecosystem.png b/shift-left-demo/nest-order-service/assets/order-service-ecosystem.png new file mode 100644 index 0000000000000000000000000000000000000000..860e890269f25e072da77ba876fc47b6651800fa GIT binary patch literal 70928 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 ({ - 'pastries.baseurl': 'http://localhost:4000/api' + 'pastries.baseurl': 'http://localhost:9090/rest/API+Pastries/0.0.1' })], })], providers: [PastryService], diff --git a/shift-left-demo/nest-order-service/src/pastry/pastry.service.spec.ts b/shift-left-demo/nest-order-service/src/pastry/pastry.service.spec.ts index 4354248..f83b57f 100644 --- a/shift-left-demo/nest-order-service/src/pastry/pastry.service.spec.ts +++ b/shift-left-demo/nest-order-service/src/pastry/pastry.service.spec.ts @@ -14,7 +14,7 @@ describe('PastryService', () => { let container: StartedMicrocksContainer; let service: PastryService; - beforeEach(async () => { + beforeAll(async () => { // Start container and load artifacts. container = await new MicrocksContainer() .withMainArtifacts([path.resolve(resourcesDir, 'apipastries-openapi.yml')]) @@ -33,7 +33,7 @@ describe('PastryService', () => { service = module.get(PastryService); }); - afterEach(async () => { + afterAll(async () => { // Now stop the container. await container.stop(); }); diff --git a/shift-left-demo/nest-order-service/test/orders.api.e2e-spec.ts b/shift-left-demo/nest-order-service/test/orders.api.e2e-spec.ts index ea9dae1..993d618 100644 --- a/shift-left-demo/nest-order-service/test/orders.api.e2e-spec.ts +++ b/shift-left-demo/nest-order-service/test/orders.api.e2e-spec.ts @@ -17,7 +17,7 @@ describe('OrderController (e2e)', () => { let app: INestApplication; let appPort: number; - beforeEach(async () => { + beforeAll(async () => { appPort = (await findFreePorts(1, {startPort: 3000, endPort: 3100}))[0]; await TestContainers.exposeHostPorts(appPort); @@ -43,7 +43,7 @@ describe('OrderController (e2e)', () => { await app.listen(appPort); }); - afterEach(async () => { + afterAll(async () => { // Now stop the container and the network. await container.stop(); await app.close(); diff --git a/shift-left-demo/nest-order-service/test/orders.api.postman.e2e-spec.ts b/shift-left-demo/nest-order-service/test/orders.api.postman.e2e-spec.ts index cd693ec..12d141f 100644 --- a/shift-left-demo/nest-order-service/test/orders.api.postman.e2e-spec.ts +++ b/shift-left-demo/nest-order-service/test/orders.api.postman.e2e-spec.ts @@ -18,7 +18,7 @@ describe('OrderController (e2e)', () => { let app: INestApplication; let appPort: number; - beforeEach(async () => { + beforeAll(async () => { appPort = (await findFreePorts(1, {startPort: 3000, endPort: 3100}))[0]; await TestContainers.exposeHostPorts(appPort); @@ -48,7 +48,7 @@ describe('OrderController (e2e)', () => { await app.listen(appPort); }); - afterEach(async () => { + afterAll(async () => { // Now stop the ensemble and the network. await ensemble.stop(); await network.stop();