From fe2ee5379cd4b41442d446817d1e5c4e49413cb9 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Sun, 18 Feb 2024 00:32:37 +0300 Subject: [PATCH 01/60] Test completed --- .../itmo/test/tuzikovalexandr/DaoFactory.java | 12 +++ .../vk/itmo/test/tuzikovalexandr/Server.java | 23 +++++ .../itmo/test/tuzikovalexandr/ServerImpl.java | 98 +++++++++++++++++++ .../test/tuzikovalexandr/ServiceImpl.java | 46 +++++++++ .../tuzikovalexandr/results/status_result.txt | 88 +++++++++++++++++ 5 files changed, 267 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/DaoFactory.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/status_result.txt diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/DaoFactory.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/DaoFactory.java new file mode 100644 index 000000000..dcebb13d9 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/DaoFactory.java @@ -0,0 +1,12 @@ +package ru.vk.itmo.test.tuzikovalexandr; + +import java.lang.foreign.MemorySegment; +import java.nio.charset.StandardCharsets; + +public class DaoFactory { + + public MemorySegment fromString(String data) { + return data == null ? null : MemorySegment.ofArray(data.getBytes(StandardCharsets.UTF_8)); + } + +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java new file mode 100644 index 000000000..9cf369531 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -0,0 +1,23 @@ +package ru.vk.itmo.test.tuzikovalexandr; + +import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.dao.Config; +import ru.vk.itmo.dao.Dao; +import ru.vk.itmo.test.reference.dao.ReferenceDao; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; + +public class Server { + + public static void main(String[] args) throws IOException { + Dao dao = new ReferenceDao(new Config(Files.createTempDirectory("."), 64)); + ServerImpl server = new ServerImpl(new ServiceConfig( + 8080, "http://localhost", + List.of("http://localhost"), + Files.createTempDirectory(".") + ), dao); + server.start(); + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java new file mode 100644 index 000000000..d1602347a --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -0,0 +1,98 @@ +package ru.vk.itmo.test.tuzikovalexandr; + +import one.nio.http.*; +import one.nio.server.AcceptorConfig; +import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.dao.BaseEntry; +import ru.vk.itmo.dao.Dao; +import ru.vk.itmo.dao.Entry; + +import java.io.IOException; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.util.Arrays; + +public class ServerImpl extends HttpServer { + + private DaoFactory daoFactory; + private Dao dao; + static final String[] METHODS = new String[]{"GET", "PUT", "DELETE"}; + + public ServerImpl(ServiceConfig config, Dao dao) throws IOException { + super(createServerConfig(config)); + this.dao = dao; + this.daoFactory = new DaoFactory(); + } + + private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { + HttpServerConfig serverConfig = new HttpServerConfig(); + AcceptorConfig acceptorConfig = new AcceptorConfig(); + acceptorConfig.port = serviceConfig.selfPort(); + acceptorConfig.reusePort = true; + + serverConfig.acceptors = new AcceptorConfig[] {acceptorConfig}; + serverConfig.closeSessions = true; + return serverConfig; + } + + @Override + public void handleRequest(Request request, HttpSession session) throws IOException { + super.handleRequest(request, session); + } + + @Override + public void handleDefault(Request request, HttpSession session) throws IOException { + Response response; + if (!Arrays.asList(METHODS).contains(request.getMethodName())) { + response = new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); + } + else { + response = new Response(Response.BAD_REQUEST, Response.EMPTY); + } + session.sendResponse(response); + } + + @Path(value = "/v0/entity") + @RequestMethod(Request.METHOD_GET) + public Response getEntry(@Param(value = "id", required = true) String id) { + if (id.isEmpty() || id.isBlank()) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + MemorySegment key = daoFactory.fromString(id); + Entry entry = dao.get(key); + + if (entry == null) { + return new Response(Response.NOT_FOUND, Response.EMPTY); + } + + return new Response(Response.OK, entry.value().toArray(ValueLayout.JAVA_BYTE)); + } + + @Path(value = "/v0/entity") + @RequestMethod(Request.METHOD_PUT) + public Response putEntry(@Param(value = "id", required = true) String id, Request request) { + if (id.isEmpty() || id.isBlank()) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + MemorySegment key = daoFactory.fromString(id); + MemorySegment value = MemorySegment.ofArray(request.getBody()); + + dao.upsert(new BaseEntry<>(key, value)); + return new Response(Response.CREATED, Response.EMPTY); + } + + @Path(value = "/v0/entity") + @RequestMethod(Request.METHOD_DELETE) + public Response deleteEntry(@Param(value = "id", required = true) String id) { + if (id.isEmpty() || id.isBlank()) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + MemorySegment key = daoFactory.fromString(id); + dao.upsert(new BaseEntry<>(key, null)); + + return new Response(Response.ACCEPTED, Response.EMPTY); + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java new file mode 100644 index 000000000..bde6dd5ed --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -0,0 +1,46 @@ +package ru.vk.itmo.test.tuzikovalexandr; + +import ru.vk.itmo.Service; +import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.dao.Config; +import ru.vk.itmo.dao.Dao; +import ru.vk.itmo.test.ServiceFactory; +import ru.vk.itmo.test.reference.dao.ReferenceDao; + +import java.io.IOException; +import java.util.concurrent.CompletableFuture; + +public class ServiceImpl implements Service { + + private ServerImpl server; + private ServiceConfig config; + private Dao dao; + + public ServiceImpl(ServiceConfig config) { + this.config = config; + } + + @Override + public CompletableFuture start() throws IOException { + dao = new ReferenceDao(new Config(config.workingDir(), 64)); + server = new ServerImpl(config, dao); + server.start(); + return CompletableFuture.completedFuture(null); + } + + @Override + public CompletableFuture stop() throws IOException { + server.stop(); + dao.close(); + return CompletableFuture.completedFuture(null); + } + + @ServiceFactory(stage = 1) + public static class Factory implements ServiceFactory.Factory { + + @Override + public Service create(ServiceConfig config) { + return new ServiceImpl(config); + } + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/status_result.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/status_result.txt new file mode 100644 index 000000000..59e0b0441 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/status_result.txt @@ -0,0 +1,88 @@ +Value Percentile TotalCount 1/(1-Percentile) + + 0.017 0.000000 5 1.00 + 0.768 0.100000 9945 1.11 + 1.423 0.200000 19900 1.25 + 2.053 0.300000 29834 1.43 + 2.821 0.400000 39771 1.67 + 4.775 0.500000 49713 2.00 + 7.159 0.550000 54686 2.22 + 10.031 0.600000 59668 2.50 + 13.567 0.650000 64627 2.86 + 17.423 0.700000 69604 3.33 + 21.967 0.750000 74571 4.00 + 24.495 0.775000 77066 4.44 + 27.567 0.800000 79544 5.00 + 32.015 0.825000 82030 5.71 + 38.303 0.850000 84519 6.67 + 45.919 0.875000 87009 8.00 + 50.303 0.887500 88248 8.89 + 55.295 0.900000 89483 10.00 + 61.343 0.912500 90727 11.43 + 69.887 0.925000 91976 13.33 + 79.551 0.937500 93215 16.00 + 85.247 0.943750 93836 17.78 + 91.839 0.950000 94460 20.00 + 101.183 0.956250 95077 22.86 + 115.519 0.962500 95698 26.67 + 128.767 0.968750 96320 32.00 + 135.039 0.971875 96635 35.56 + 141.695 0.975000 96942 40.00 + 151.295 0.978125 97252 45.71 + 162.815 0.981250 97562 53.33 + 169.599 0.984375 97872 64.00 + 171.263 0.985938 98030 71.11 + 174.591 0.987500 98184 80.00 + 179.199 0.989062 98342 91.43 + 186.623 0.990625 98493 106.67 + 194.687 0.992188 98649 128.00 + 199.295 0.992969 98727 142.22 + 202.239 0.993750 98805 160.00 + 206.719 0.994531 98883 182.86 + 208.639 0.995313 98965 213.33 + 209.407 0.996094 99046 256.00 + 209.663 0.996484 99087 284.44 + 210.047 0.996875 99119 320.00 + 210.431 0.997266 99161 365.71 + 210.687 0.997656 99201 426.67 + 210.943 0.998047 99247 512.00 + 211.071 0.998242 99274 568.89 + 211.071 0.998437 99274 640.00 + 211.199 0.998633 99297 731.43 + 211.327 0.998828 99317 853.33 + 211.455 0.999023 99332 1024.00 + 211.583 0.999121 99350 1137.78 + 211.583 0.999219 99350 1280.00 + 211.711 0.999316 99364 1462.86 + 211.839 0.999414 99375 1706.67 + 211.967 0.999512 99383 2048.00 + 211.967 0.999561 99383 2275.56 + 212.095 0.999609 99389 2560.00 + 212.223 0.999658 99395 2925.71 + 212.351 0.999707 99400 3413.33 + 212.479 0.999756 99403 4096.00 + 212.607 0.999780 99410 4551.11 + 212.607 0.999805 99410 5120.00 + 212.607 0.999829 99410 5851.43 + 212.735 0.999854 99416 6826.67 + 212.735 0.999878 99416 8192.00 + 212.735 0.999890 99416 9102.22 + 212.735 0.999902 99416 10240.00 + 212.863 0.999915 99419 11702.86 + 212.863 0.999927 99419 13653.33 + 212.863 0.999939 99419 16384.00 + 212.991 0.999945 99421 18204.44 + 212.991 0.999951 99421 20480.00 + 212.991 0.999957 99421 23405.71 + 213.119 0.999963 99422 27306.67 + 213.119 0.999969 99422 32768.00 + 213.247 0.999973 99424 36408.89 + 213.247 0.999976 99424 40960.00 + 213.247 0.999979 99424 46811.43 + 213.247 0.999982 99424 54613.33 + 213.247 0.999985 99424 65536.00 + 213.247 0.999986 99424 72817.78 + 213.247 0.999988 99424 81920.00 + 213.247 0.999989 99424 93622.86 + 213.375 0.999991 99425 109226.67 + 213.375 1.000000 99425 inf From 773e724b5a2379e33b3095c12bcc899334d0a805 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Sun, 18 Feb 2024 17:26:20 +0300 Subject: [PATCH 02/60] Add result --- build.gradle | 6 + .../itmo/test/tuzikovalexandr/DaoFactory.java | 12 -- .../vk/itmo/test/tuzikovalexandr/Server.java | 4 +- .../itmo/test/tuzikovalexandr/ServerImpl.java | 18 ++- .../test/tuzikovalexandr/ServiceImpl.java | 2 +- .../tuzikovalexandr/results/get_histogram.png | Bin 0 -> 68047 bytes .../results/get_profiler_30s_10000.png | Bin 0 -> 194073 bytes .../results/get_result_10s_500.txt | 90 ++++++++++++++ .../results/get_result_30s_10000.txt | 113 ++++++++++++++++++ .../tuzikovalexandr/results/put_histogram.png | Bin 0 -> 68396 bytes .../results/put_profiler_30s_10000.png | Bin 0 -> 191207 bytes .../results/put_result_10s_500.txt | 90 ++++++++++++++ .../results/put_result_30s_10000.txt | 111 +++++++++++++++++ .../test/tuzikovalexandr/results/report.md | 0 .../tuzikovalexandr/results/status_result.txt | 88 -------------- .../tuzikovalexandr/scripts/getRequests.lua | 11 ++ .../tuzikovalexandr/scripts/putRequests.lua | 13 ++ 17 files changed, 450 insertions(+), 108 deletions(-) delete mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/DaoFactory.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/get_histogram.png create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/get_profiler_30s_10000.png create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/get_result_10s_500.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/get_result_30s_10000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_histogram.png create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_profiler_30s_10000.png create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_result_10s_500.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_result_30s_10000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/report.md delete mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/status_result.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/getRequests.lua create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/putRequests.lua diff --git a/build.gradle b/build.gradle index a82c0105b..fef64315d 100644 --- a/build.gradle +++ b/build.gradle @@ -46,6 +46,12 @@ test { jvmArgs += ["--enable-preview"] } +run { + maxHeapSize = "128m" + mainClass = "ru.vk.itmo.test.tuzikovalexandr.Server" + jvmArgs += ["--enable-preview"] +} + checkstyle { configFile = new File("checkstyle.xml") checkstyleTest.enabled = false diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/DaoFactory.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/DaoFactory.java deleted file mode 100644 index dcebb13d9..000000000 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/DaoFactory.java +++ /dev/null @@ -1,12 +0,0 @@ -package ru.vk.itmo.test.tuzikovalexandr; - -import java.lang.foreign.MemorySegment; -import java.nio.charset.StandardCharsets; - -public class DaoFactory { - - public MemorySegment fromString(String data) { - return data == null ? null : MemorySegment.ofArray(data.getBytes(StandardCharsets.UTF_8)); - } - -} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index 9cf369531..e6cb72442 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -12,11 +12,11 @@ public class Server { public static void main(String[] args) throws IOException { - Dao dao = new ReferenceDao(new Config(Files.createTempDirectory("."), 64)); + Dao dao = new ReferenceDao(new Config(Files.createTempDirectory("data"), 64)); ServerImpl server = new ServerImpl(new ServiceConfig( 8080, "http://localhost", List.of("http://localhost"), - Files.createTempDirectory(".") + Files.createTempDirectory("data") ), dao); server.start(); } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index d1602347a..1fe7bfb18 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -10,18 +10,17 @@ import java.io.IOException; import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; +import java.nio.charset.StandardCharsets; import java.util.Arrays; public class ServerImpl extends HttpServer { - private DaoFactory daoFactory; private Dao dao; static final String[] METHODS = new String[]{"GET", "PUT", "DELETE"}; public ServerImpl(ServiceConfig config, Dao dao) throws IOException { super(createServerConfig(config)); this.dao = dao; - this.daoFactory = new DaoFactory(); } private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { @@ -52,6 +51,11 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti session.sendResponse(response); } + @Path(value = "/v0/status") + public Response status() { + return Response.ok("OK"); + } + @Path(value = "/v0/entity") @RequestMethod(Request.METHOD_GET) public Response getEntry(@Param(value = "id", required = true) String id) { @@ -59,7 +63,7 @@ public Response getEntry(@Param(value = "id", required = true) String id) { return new Response(Response.BAD_REQUEST, Response.EMPTY); } - MemorySegment key = daoFactory.fromString(id); + MemorySegment key = fromString(id); Entry entry = dao.get(key); if (entry == null) { @@ -76,7 +80,7 @@ public Response putEntry(@Param(value = "id", required = true) String id, Reques return new Response(Response.BAD_REQUEST, Response.EMPTY); } - MemorySegment key = daoFactory.fromString(id); + MemorySegment key = fromString(id); MemorySegment value = MemorySegment.ofArray(request.getBody()); dao.upsert(new BaseEntry<>(key, value)); @@ -90,9 +94,13 @@ public Response deleteEntry(@Param(value = "id", required = true) String id) { return new Response(Response.BAD_REQUEST, Response.EMPTY); } - MemorySegment key = daoFactory.fromString(id); + MemorySegment key = fromString(id); dao.upsert(new BaseEntry<>(key, null)); return new Response(Response.ACCEPTED, Response.EMPTY); } + + private MemorySegment fromString(String data) { + return data == null ? null : MemorySegment.ofArray(data.getBytes(StandardCharsets.UTF_8)); + } } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index bde6dd5ed..32ca3feb4 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -13,7 +13,7 @@ public class ServiceImpl implements Service { private ServerImpl server; - private ServiceConfig config; + private final ServiceConfig config; private Dao dao; public ServiceImpl(ServiceConfig config) { diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/get_histogram.png b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/get_histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..012687da97caff5d3bda161b75c8842f332af055 GIT binary patch literal 68047 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%0D*gENw{Yi9}kYjjw%JH#sOiYEBE%ajB1n(cS zf-)ETC{U4$RpaM$`Yami!8)G7s;bKD+!Gs2m9lMS#{BXaO!a zuik6QNdTapjpTc9yaTIWlqL`z0x}xV31B|N*eWU+!8LY<(=R`_|E&LKpgxf8+bGtS za?n>;Tz=(ZaSJqFRSBtVT`Lv^YY4v&7-iTSypLBT1EV=HyIETS}zkg7qsQ7?h3*2}MehWQtbOO_!0WH+DadfiQ z#m5FuoNpkj-=5z63@CQ1+j7f91+8x`BIc$taM206;GT(_;r27>-~S;JBeJaI`I&Q2 zjtcxE&?p4*!GkNdWOf9KNE;;%(SQ-0>6qjkfGnM~i2-9M@YacjhmF4CgHsr^f$be= zeOXf!RZQ0@yO(-ABLu1xJv>UF^vY|_CQ|l8O6c}4XcGk5CO|%YNM8M00vucoo|0Jr z-s@2pUX>5jPm(bBd0>vmQZF=|P70FGV{~($y-ci=7+#nLJB$1g8IwPBiU+-q*CG#N zZhkrXQ8eV`XKL0sFu-7#ZTBL$?|1fIRj80byQ&nO*V#*P~%5>R71+I-4IYL2zjv>1?4DbAevoT42)eEAZqe8VA{u1{?72HAQ-h444&aL#xg@YZ3r2=`e0STWB5{d-->mlI~T(1X4kDqC6e zQaTAixaIR|XedZDaPL6Z(1Yi90UqLdofvQg($wu*Cpis#fy*5+tLrr+%s&mIatG<9{TPu$hJqh1p-9e6z%vVhL?9f%a{7KHckqg?}iK z9Q__sM$Mhmkho~?AiHL5?V>>_>B$cx!b!CsnTxApt zr0|8U#F|yCKXIZ3xUAXPU7T*EQG@Qu%2#=6l@+s-W=4_qQ7nk>64qx!$>Yz*O~n-t z!_fxw7ns;esSwt3{W51dmc+$ReF&;>B14(DuBKa=cbB?AM#C2)T$Q^P>YirBnjo~F zV3r3_7GR3aJP#-eu^`IW){xA_if|p+Dbv-JbCM(kkl*FzP1%+CckVV&k}-Q|$0I$Q ze%bKS<^#7U-9r|I-xi0=K&CF+-tt|yeYi>d7aR_>!!o@LRfUh6ny3|8neXD)?5;R( zrW(4(ycJsX56E`z;$k-nc>YmS{h8@JyAP#uqO zZc}A^)`QXeczHcQiOfFOa09NGK5=n)bdW+?Ye`l?miW&~*$)MGV$C1*U6M7tJk?tN z*{-7Xin|IY#>`re^{NO;9n{_)E!1`iHwkocYqW?*qW>Ju=ETTrt&kw44FKh~PE(C%i z@kl?46b<0^sfF`+2HSO)SK{%?vwPJ*Tj#jIGohfc#3^^v)w6k(Qv3m0H`to@KD};` zr#YoFD~pGpsZD{Y*Pf;mJpk2C(_kH!*vr#~aa%nspuVoAGTWb~I>FmGDz{jE^ISKc zGC^2~qof=P`=HWNtEl+3VmhXB_4o8&WZyXZYYyRmL9LU?FIQLVKuC_Z9sFiH^o=DF zb|M}XDF{J^lR#}^Ql~k`!=R}Y(l{km$lz}{3S>#r+%E=-Wj#GPJy0*wgdH9S6}CvN zj;A&lX+9J>o6MA~YQttlC9^gv%`!tcpFR@V*2+KiKlXwJO?ywc!_W{i5`^+<&DkuX z)2WRei{2Hg%uh@wT+pZxq`&wpTlm2&E%`NEw)0c7wdn}3{?{X5S}`f${^7vUHOX$U zKXF?z15xDV*S9}bu+)F7eyfk%?J#kKx}kT&t~ci}a_Tx9EzQk!_4M@c1=N3-ym%c; z`3x#EsUXR)*`FB4Y3Dk<4(pB0hl2xaMP9?XX z!&0wUUsw^7^TrA>>?mN-Mq%w$={~i1a=Y(I*PecEQDomx;aeBHyC=xB8CdELS%!$Ny)IK@A}>=2Prhv+7963c@SGqZGm zDz<%4AnCBAY~8}BAM+kLf1H+QtekpxN!*TN3~@^f3Kym!qN5h(&9%}A=Gn;clDO-; zfiv_`g>pnMC(Ntja==+?$ErYxM&&}w@e4%yp z4kG1Wch%HPJltr@2Fg~SjA^wauzh~>?D6N)VI{2I<{4o>k1jtg-8p?(sg-w6SC0ul zSpie4;%DF(vOvi&U}cqkzvFtV;Ylv2yJIBJqCRgu;qenQ?vv5C&i3H7E<4AKyZ!c# zk{|K|O7F=LFIC+gUACAj-)f=@of?0i_-=ePfVDE&^~xUMr^2gg3i$!$m=uja!3O?^ zrL=4~2EJnl7)S`%gZCXt@FhY01cK1Z3dw}ajaJ`=!v(j9Z%Dg4myO8ya7Si%r=6sS zO`AkdrKk=ejq$&=e>#<@c6t$Uv=H;2y`i+W@!&n&Iq)35aVns}PnRVkBF>>DFr-Y$ z={@YuF&T5)M;L%zoLTRt3C!_x1&K!ox=DM+p;>d(=#0}W*bVVkK6`q*x*j9%7PSA* z*W+wa&|I19cZbAtJWSQ%bNQR&*uqAC|LoMfAygAkI$STBxLeXnh`z|}W1pMxHTZ*P ztlUx6Fws9#x>dAzFM3;5yV7glWTc4>2-?PM9I1j*f8|1m!${(4!|P0Tn_>+ zPiDEwXB*lMwoc;*$@-4DD=!j^0qe`b?JEU(; zL->LO(m0gY(qKH_cVr=V%j1{v9{v0AYR9!bSHOkabg3lxHQ&BmLcDR?%#m_b_Yoac!g^8d zP_I43vLzR9%sf|TD~!bPeqZXg$aCVpb!NRq`Jw2Jp!W17lybS)q2dB{a>eR&HK;Cj zmbd%B3z)`jeL79%d*ezvo>6|Fx4YGxm9k8X46c8bn(5HBC-y(5=FRs>?(w4XYgDDt zhfq(Vt9@aaMjFDygH%8e+Un&%9KZVioq0olXq*Pi))YIX0PT^*p=mo4{aJcr_CWCP zWwel39$GzLEmDOpnks(!u7E}q_Ma#y#mHs&RM&F^#o3gZU!D}m zwU+NG6hU=T6DYA#dzn5c8t_Ce@AF^1;^sekLgVjEC(5CSDH#o__3~nQM#-P#1mz*} zWf?YEdb2c$SEiT&bQ$k+!pATR6z%)k4z0CSvHVOi1)$9LYiAzgpf7AYYa6?pIC&M!Ds+8qg|U6> zS^7C4D>8eGf=xk%f2gH8laJ*YKRq4K)5W6{>Q(t5Kw*OB7xz@a>Gj)YI;nQW3yEyg zw4g!)i}rFOWRmG8ZyQrHYW6YgMp+nx{FA0hXCbUtc|7&^j@WAVE=b8QP^}wYNAHwt zEhwKV>IZ}r&g5-(i>betdM^4a`i7cY-`|p$^jN~D?_uATuKmjhxkAjJ%b_k&OKICy zEsbwvTczPu`gBHC-!yCspapbBTPk(DJ;Gcw*st88qjZb{$WtWCACPWpFWe?|x3Qo! zX4fT#dL~)Z{szRCHc9q*u!Jm z`D}0AmbXJb+@ATt^~GJ4yMmARx3BJwhg6g{xd1c3XYFU~BJ0p!r+}&3k_2Go8LcBr zuMpE$56QkO%;vzT|L#0~a9VaU79{`KhNe5E8M)7ML!SJsAq=bZ#%2$c&vqxlB=9L> z__4n_OsXLj8^e)Ju>78WPNm&>JO7pdaYdUvT2x^uxq7_+F2-!V^wfk~rMg;^9H$AP zmSVIGHKOJIr9cv$=p_NIk&9zKi zb|z|X)!FkEr}CKK4f1}j=J{nAAH%2slp@i4HLI6gvMsG>E~XvUV2*9FeoUNEry#{i z%~MA_P~?5HmO_Xmm$;>{-~PwJTxwi-DRZ}&BMjk-0<2dL(wUbSHGF!@MlPy4Ja{_G zF<+K)!hylP1#{0=<6XaUxyNHJCna+W)AACOmok;UC~DXw7v(a56Lct`N{U41x2s#_ zI!;67$g>cQP&%`zEy=k`!uU6KKGUHPjgY$HA)#d|cUxDv>Da^-jg-n4SvEP7sjjj# z!2h#7%VE_!B4n-#7)`eu8#d&{W>E70g9>F&p&*WP-%P816U zc6;UB!?~}d1&Aa~5iiX|V=Yv;vg%BlB;Wt@gx*Mfmc!7`K^K*kX+zPC7lXLsP7IiF zTssuU?;3v#vzyec&6Y@I{N!6%9*L|rsFM>u(tx)B3=*s14Y|FO%OS9g< zW#DJvL}4RkaoqoodV>$Br?J#BzZ26fPbH!CMu7!2=+)+=t)T(?SFR{+~8Zp-j;53 zO4qA1vkmjthqclq6oN{a4`Ex7C6oTIc{Ljm7C=eW5?7cW<oe9hMad`}6c^d0-_&I#JSE z)4k+`&>Ny3-K-4Bzm@y^t6#)_^M0K(`Em>0{Nd8^MHBxg zMn#@gBP^5;KS5JN-FS({n018)UyWSq?0lT%cx6y#t?j*bK`zvr3eEd_bFTSkn+aqr z#`EC3^?ekN^EWs57KQNGe@2;%!{hRsw+ZI;uaBA(o*BWgM?l{xL zA;N1BYfn-+mhGa~<{%fE~0m1v|Q2;($TzuE6dgTWP zPNQ8^Cw#MJq|^Um?dLa|NMp*T!t0$(pu%Rn&CpRO`BTRa5ng2trAF~{TX05|v@#(* zR(Lv)Q?>z{e6xrr45gqXid_P|%H#38?J}J3uqQ0WyLtZgWShJy!7KtZuD%3N5!I}b z&ZOQO<0^M<1tvA+-XmWEh5622THQ>~esqWg4flnY34fL!8vSHd>9v#6YOw?S$Ga_- zD(rD6ZtusVq$eTepDpPEGDX!dy%@+FC|_q2ew~5&dFTsQjA^KL*YRr#8?v;6{wL1e z7oHG2msmSBG!WX3+uL-LQOPrG2;wLz~5D$8}`7`b)m)b?dIq`r(hbf#>}}irs+4 zWa<^mW5*Z49iGa8q2%Sv3f{d;A}w?-Vl614xP{P0FAfV-T+Qwx=F-+jvaGlqc?;?dR{O_qRO2nc3~ZfuWaB6o4IrH>an$^_gLL0Xear=J6x$f&JG0^bh5J zThC?PnlXL1wSZf~xn@uvDZQ16&U{K?`?Ax~S$B$%V~>7!x%TJ(K@j=k6zmatn~Qto z^C{V&HJR|T=Z!$lLGjPy`}IlqTW^ZAoGNt${?M|;g`B9e2rT>9=~5Im`CT}89gUC?xpzchWZ&#r(O#z66u~3mvkv^uKe9ZeXB~Wo97gGS3AYS+!NpWgxkB1ufd@H}=+aBht$SR7P3r@xkc?Io3Ot=f?AVsP3tPYMp zHH~%E4$4cBOmkJB3C85&oAQRR;?_C*7%>m5quo_G%`pRZ{p0GtA`Zhp+Q6Pg>kMBc zv#Bml2jwLYTvrQ#?`}D)e*3=Ba;Ky)CyIvgvgk8fIQho{%44$?^GkkwaE`X`bQx+R z2vkM%?x-fw=k>#feC9vz{GI^)$WOw4C~+Tp<3}+^a`8j2v+^3Jw^}jbRS$Ob%T+q% z8IUmdo0k>R1Ek#gGmEoQn>XB`)x3312Enk*Sv%soVD~-4k3xd~p<8dBIs5r=3XN;8 zw7$wFO48j`{td++D%)gsJF32ZRfG~j*e3_cJ?ffW?CFsfioKkE=6wNo6~{B=zJptQ z-K7ZJdI&CI@C4U0By1kG=+Qb6t{*yGyj+N&G!Y44Bs$tB+=tXVkDT^stz4X!hf zZfJ>)9BJ>qd%p0#$JCUe&|q?LUw5tet&)c|X1fp+<;ELL6KM$KP)`;~42kzDJ%M5Rce#D@+q-qgPHX}21x)8MFVv3ocn*yXQF_AkJndg#2{yPZu^zZ$1i zKC602xC>ciAH;8Zc#(fa<96?YI+z-n&CXu7sdcdwROfsez7Rq#zD8*`=C`AQr=Gq~ z2s|9de;7b`E+V?EC+l5qGOUbNnqDQ}?HbkYL>KIx8xkcL-lY_6mNTgPXNq22RqmNB zz>4^ky!2TkPD%GJFHwXJiL!2Z=ht#ha438WnjA2hjg zVbJ{Z7v?_&yYf&!i4&J{X%;L0PId4ZN`8Xwf`vl&W)BfKc*lXTTI`G+M~0h@{dM>j zZ}-8TH%*bG%ZqK0f$s##a>@=qR%Sq9ADjPhPy1vuvhZQbb?5h(xBY=<^*@0w=WLm! z@nN`cW60_SlIw#OLs+SA7dxw*CSBxA#L7;Jx+H~$&QXFdxY^?S2331k31G#IZ1+_P zU&@-E=*8_KuX&>bZCI*r7MLYEw*)xsuTI3??nw31QL|jb{MYV!-`3DYb=7pEHv9T^ z>j*BX+%#HgE$e;q+;VW5EO3neil%aZIw>PRX77kljN6g>HD?@#bbtT!tU+o~(&H?0OhZZd#%<=wR&yTb@!jZSJOI5WW5(6tKc>a)FRB;uA_vb*+yi=9{cO=!5k#71Hx>%0ECNwtas+2 zHrh9Zx2K~K-M*l_LoU%O6rMR>SH+ zVH!>@ZeH(!4<(h2eXqTZ<*P-UdDrC#1SFXp@?Xz$wLiT#iGk2E{F;8)zO#4F^__~w z3E*@3aa`ZEeJexd`q}7~YE|9su*!Lb=tVPUPscnk1=AV&1J6dn4kasRY%{1<@0tql z!g(0xD9%O7(EfOzVN+bUOGBDKO1Gz>efe8Qbz%6+9u%jZzcwMw3T60|iZ^7Db+Dg| zS^X?4*!nx6LQH;Y%R%#8Xu(3~IDb?8STRO>HS%h4MffyboceuHAHdZ!Z$=a<6e$mr z$jdp~I<;!2_zWM8yI+bzTfXgCPu#~zXF>ByZzAhW>WTxA`0YsK`4e;(b6_^pUYh>o zqAZP#fmIJ?^jCpA(hU!<+BW@;tFA#2hcQi3aXzbt3(7fLv1fMwSIjM8(o`r7C_y+X zKaJwYgY}D}x7mhIlb%3_$XhGLGc=jyA_;1B1WT;&0ogeSv44 zdGGozYMI4ek#1~>$ybQ5%qHABy2;;-&b!DnOh)Fmta z8Jx||vRr7x#^!2_=X!)BKBYxVgSG5t;;2@I% z0R$8;dGqhVl1p%)g$CbEp?8dK>F6vz73zJ*p4_gu`Q>zWU02QP#u%Sf3RqYKG1E?V zRY(Nq-Q;XtWf09VvO6eG065ZCkCSec^w`X`r4|m&IN_ZI3b(2R{l-m?L*4rVK^TQ+c#DT8vPvA24Bd;Lqui8Zjlm zPK-78x~J4JYNrXN1@ju! z2_2zk`o2HgS$Y`R-aA*FsIfteAhk3eEkhISR~hEuVE8@@QX^rGB4LjgKr-d{LMuL; z1!$bJn`xhz3v$RS^Bs4=n;*TUAUpAm9A4O@Rj zQ_oixT+hBZklef=Fp!OB%1~f%5XT7?ua$}Gf@t$h8Np_<7Q$2W0~qI&(*A(3*-X~u zEh-J&4!Y#yavM)w;)jAWRH?q`Q$2mtcUS%hk^J-1Ak;t_#~H1o6D`TIcwA+i_?gO8 zs=MtAl%n$69Wx}NwUQrPQ5BvB5l3>QZ+QvdUBARCMvgUMcn`LmAR&oD_X5N|$&r)G zbD11#@fKt}uUyAQLP>$IFxSP!ibRz}Tf`D}n92F-ke6$Dvlt}snPHZ7ybsC1mW(s` zs=(+|Ikut0WSumGn3vrW!R(g)9&-`Z!7sPIAuMe+AbL`rk>Z?3rbFRH4X80{W z#GA0T)J&{@;w_p#P1Bnb30~6^A7Y^TtlpPa^CJ!>Ja5UUml?kvKOuZy6PrWK7~rZf z0(@3D&Q+QECP_;&T*uZ6@kJx7oe8%%2?G|rHzuW2!@HR1z&V7@M($k}5MEqON&-tD zH~3!9Y5PLn>Gyh3uR-n$`vxys2BR=z3Ub_F^-*WUR{f;6-12nY9#?u!AeFYI&HH)u ziBwbl|8(jT*R1HZc=5gC})#t<H1>=qpn4$5k_npKzLq@HS_)qa;)>3K_-g_+!3sXE~j|Amzf_ocnxN(3>q4zysUBK5kXx#+8o%4P3x%y#YykQpt=lOlR2T%GYHK7!44F)Pyp=#lG>NeA>Bw&4; z0ahh>ZNnW5KpwLDFePw~oE z6&pKp{&&@0wsD>YJ+s5e@hO<-9Qlj(t5Ac8jy-~`2~5}1`2h|xURiH7hi&EMOz>Dd zCO37|fwX*mtz&1OH};CzxokWG=qw(y9f3**F5qz$x(PF&YcSPy+$M@;nf5|5gUui}!e+2W=t=0`bzPlt}*zM8F)`NH8dJbf~-9uqInt$Sx z^jTlfaA#BgSsnai4*-7IoX7Y)RTV`Z8rDTH2q@87dyjFmM9aGv&Te*-I%mIG0MuX$ zScjtMxKe8t7b|A4;q&DWrh_G|O!OesfZdW;U(u#XQYsJr#2ITMTSdlPX`GH}$xC~Z zh8w7Gw4nej@GJW)q*UnqERwhdg-HRa8!Vs8HxHinH0p5duN5uZp9iH0T3M#)TcJgUO7; zhete2fQ&^UB?#-UbvGyn+6T`-FAmD#s+dVqQMBO(f5?WD$!L9$v=}P zMTx~$&CVk@p@1OEUC2OJ4hust5CnO%k~x6t+oqYU0e z5nVY6NjWKaoLEiL*#oDq{4Ww$P`0)b7@wZ|)W@wByU0AWdgz%LhH9VcsyJ~wjTZuK zO&cQAb?l~VWo=z=DzN+oaEPAQ`mtA?uhUpb8Z0!GyzE(*9dy8$MSMZJ3rm}9lN z*|rv2+H)31cl!VjhFT2J7oV)U032zp%T}SnD0zzf-^>W2uIn+luK*so%Q}DUY4uZp zo$w387VyaV$}Tii<0&#bJ39rly4kuL(qu{bf5m-;TUFoIE(W21s30LJE!`a|Ev1BX zmvnb*328wYj{%Pa z-U+*WqP~!eo)eE4h{A%Jw*_jXIDF*LsP_@{e9uwSyoMzkd2G?K!t>W;U0w%0S!nkLD@(v=cJ4W-0bsv zE8jRxKsIvpG=e7(!ZiR;`_KvrAajNU-O@IS#Z!|2&;*Q+m1RhM{6-FaSP;P`!h^Lq z7_+||qXc`@%{fy?%ZEt{#(M>j@7fF&i-}3lh2Xcl5nWJ=NBm+w#plhtKz7qpAA>(t zbWfqtXb02PsNPNF#9|iFRT6&tmR8rRk{}mfGA-pI)W0#Gxq*uKMx&$>`SyokXQw|d z6N%>c?RlMAN||)3zwo%WMHgGd0@X> z_H({&?D@F;LuFJTO`OX@yX%VCS2zs`^|qlq(om(0fRg#3meFAlRgPH;HaIT;m-oem z+tcwPrHV2%+k&|4ASejK-(O02)i(wA z$$Q$&0}JhY4iHN2Bn!eulgDObGCoX-9mK>63_Yh_oH)bZFxsc@f`I=6BTcnzEqFPEntmFnbf_xb?DcEIhrE-KbyNR|gl)+^KwJwwPsK z%eY19q#NAH`c#}H{IM>9>2eF5^se-D0{@*afxKLc#jY{LgHdkOzN=rMvOWBME*jN! zX6tOBXxSSjt{d_fQMEOwJbO*T~OmKJOm9Q$A8q@cKDS zjONKnl+$lwA%yyNPlT!ORWuDyatmmzl6|c@>p8oZJf6%%5|Wr7#fQSa*Y7O)32t@6 z_IhR)X{K;1Wxpi2$drN239>`6PM_;#x9slk1{ng{^Qu<^wni)nxz1;=Kl)(1j>)eI zc_L!>994spvC8TK-2ruaV%(&Igu~Qh4h|LW!9eu^eu47-8Re*m9ykRcw@lTwqm6P5f zb#NYc_J`dLo3{gH){kSWki*n~!fVdWeH=Ntw=F<$0;oj5O;j!W<#p=g^+g1D8a2~l zprd}vcw}yy(J=Je&e3gn8d{6tbpM?&gXHupdxn6?KzMf(2%<}O;^+Zg9MBvEdsVpL zRTm!{nz3!0NWUL-3In1by#i{c;UWef##sP>OU|_r{ePsBU(kU731nWn_lfCT-eb8I z5xWk^k0vEyxZDR|7I>f20o{9VEZhPpuakke&N%5|xo=^EW3IT5oQ1Ih#!yKVIc zq5wNyI(aRYslsfa?($3TB=21C8u*-2zi#_Bf)xS*#nuNvW!%}pdw^HsS27+{(CbQ!Y(-h%O5bDQ0>O+q5WSkHN8Q_*~iykTJurzwYnyk z#7^?QgQo6^i18EY{LW5Ax{rv#4HI z?OecTK@u<#2vS?Vd!KZg#B;~8wx zM1JFWru!Y`NCkrra?5Jn!+o;w-=321xjwJ)@}~JOOhW^qz>5$@vHGt$R>}2^>#S6wv1UG#LLf~QQ9^Yl+Z$n;FfSt8KdS|u zWVtZGg1E*5rY!*kzWfZPD3Sms2A~+CM(%Y4MlM%O-n=LFe_Tt1=ynkds+_815ZH?L z;kfJpk0)e&{>lHm^UxEbbGLSJRyu`-K`1j_3HepN9L|rX9}}s0TLQc|H`r=C6z1zL zIcX)+L02AU4(=@fBx3^N{6XX0>%?;+*~%uu)Y>3uO$}3=wRhc^RUrW1%UYZM6F>P; zB!A{KU3-^^F4G=OE%)bw6~h?M8Z(`qM9OQ3R+}^!WTdspzFiL`T zyJf4maR>as8D$?9e3uid7V*qq3 z*$0R|iZABVXn9k$rgLnfLBOdHr!m#?Y8igtbbPPmJx4E=2|e{gGpm}!qH?a%N=mm; zh^%M`okGj25zIVehOAWCC^w2L-I3j+(u1F- z7TGS@Q%7f>zc5*MvsGQVWNj#e^3ra|Zs$8dj{wsf6E7N->1Zs55D-QLk@o8{E3u;q zqC$!`mpj$o&CA+RbqGhg6B^!FBXi>ri?W}~t&}m5@*MDk`ypme@l1z>Xg%1E{f2x? zNc3&a=J+j@|2x}0s=DKC$$${zug4dx!H)=Y87#41pc@h_I0XdT)0+<6;}Ka;xah%` zJG6UA>hPvztEe_xoM@17*w;IQPwk6z&#_!(zj03=0GvQ+A)mGHaxPr`t<3j~gCflc zt6;wroE(p7PDaP%18qn%kZV5OJ{;W}k&+1>A48S$kE3SjT-h&b9FD?dr z>;2;7Eg@ow9`{UM|C^rXC&k<0>b~@lF+;|k#Rz;|c2afXPU{X7o&LnTCtSdjc3nWH zv7_T9gOJ&iE5Ax}Es1|@@IhX3kIY~-muf&rxFeNyCw;$K1Z|%r3wi1TsuWnw^>P8% z+hYMHHdvqNII%W;sT!g4Kl?jiGA9l~Gn0AjrvNqw<`q7GMV#X%pKLs$DB!sDv415# zu3I807o!Cz=PNT5nP~MLt;!0Gx3q2JueVrA#ExddW^z(xp474VWl57XZ?fGcVLLP$ zzA(Go8jC7HiJc5WkQOB!mpof}2kef~$U#Hs3&EL|_m8hS? z#)2D$u<`Ls9}Zj_1|Gg40`X9N|294IH|ew7mjif!714|O#E_s1#CLXqDIg|50Y7XY z99X&6)2hi1?%DV5IIEe$yV6e-PvrRR%%do@-7V<&_`3O2(suN zngN+9siTh|5s|)+^&5WkNG12@TrvOJ*#K3+DgT2a?Du^t8wgESE!$}Tn%~bfekY>_ zoE;QnNe)2oQBsJ7S9_Ry8BslIF_O@epEm|btdgfvZ>StV*f-Yb%Nc+a0cvkF=}*7= zU{c@9;ol;&CYpG;VL+`)o#e}j3d!4W1p)3qqT1uy+6RgT1%d|R-E5VRwHlrk%hNk9 zC{}B5B7k!n%jfKc3bb2xpbQ8Jh}DaJS^FJq9r8rG$svlqznp#$8t>zjIHLVPuOf1$ z-_pKkF1}voFpoM6oq!!X2B1PX%nJ4#$BgQ~ zMnFA4BH{;2>{8kzz*z^$5y{^al?>t?6KDYDVOKT2PPgZvBAR>8Th#J9v}GFSl_{5h zmh|~^ukd+MG$4YQU^d^m26r<)2Q>j8l>sm!fF8VUZr>2j1k@4$K6BYvQvWiIYauKPKd&C^js@t3NtJZF6^spD#F(D-_P2v-tWKqp`j(_!S*Ff zddw!D#>3~^j@yJyM=4O5V|q%FCF4CH&RjJ+JWurE(wz^k83J650TJGQFy$MlDF^v% z@{?TY7u+BzHXvjjscgwJ_Uo`4pUuDqMiP>XyMaoomlQd)Ef|Ftl1~08inyj{_#|#j z86qQGewd$HK=Yr#h9bF}@vzct%jK2HIeJHLBBH$I%(4lHk~&lZIf$SplV8ktj!GNg zJZZ%P$>M}1te|E)3?`7Mq$X2jyJ)3`noQIDcF7I43I)>d&3nd<=&hXZR!QwklLvX} zOadn~8zPkNjVd|&Ya*eX62Og}(lMe=eXFmsQyA74M0=a*|KQ+KVWnK)e>%}r9 zM8N6QK@rC$QWEKaLRlub;mOoN1GOQ?k?-yjF3qH26we z&%IZA%LnH6_ye0cfoIFcfR-srLgPstR@mFCklE7=>6L{~@``R&mvLI;MF(>M!l#3Tp9=pBAoA z&*|D|%G^P;>w@%9Gy}T}k`Uw`^ScU}XL1M0KwzU>)HiE=RF8ZE;JSk9VZGz~13dSIa`$&cj34`$C(u<}@ zu}-zobmf71IQ0#!?}-J=ws2f4977HKQAK%9r=G|9W*Yk!?PO~>LorF9M>bUK7CW5_ zGtmU~Py5zQS*N)NRp+3-aW@21i2=`8m0vGQX4^_gvycr4uuS2hZLKNyvd~9>mfE>G^Uewy0sVb@SrTsc zk7EE07ZCm`yaUsb&ojzZ3~m;M1aC~yp$5}EpFY3mh@a(@+IPKe3*(xS)Fz0w+dA(S zNF^%b_nv*Hk6A#!9f*JUf@o+-Ul8L?Ip=rrH(&qb%eGriFh(Z;(OOGQ=>XW(HbQ5^ zB*pAznP@F7sfOH*I{^f7fCd!2HhHVyfeQq7h20q6h6jY8T+DPU{Uwlqbh!K%kP!np zAiWqI>aVH^z+&z&MSu6tOH%|^2OK}$k5J#zq4cEg&*s$$rP4>gt2CUmV}(gRup57y zYfzHI1LzURA#ydRKLJ3+{vbg1JI0x?nE+2Nwcn;5ORe)W)hb05r^Ie{)onN}h~R3e zA}Z~#jwR?1nD`96_Y{;F?cum`0%>TDh~*TqWG#?5`2h;A01yJ$y(q$&E7tI3+cRa* z)20_SYK8o3>+FsMra2RtCN)6Sj>SgD^xj7SRq7rJBcV>L1j4Z;d03IqQsO2l%gkn{c8M)s5L%b zAJa+$N>e~nl?Bz5m2KMhKFhYap?8+GW_BrUq`vVU`d#LAHKC>0q`K~um+FyvM&-Hb zWwc(dj=oQp1<#QbfQ@aoV0#WzP>GVYg$NFiB&Q?Bce&=L0@wrJHoq~LC^59CE%pVi zIQk-tiEftIl6=f?ooBbC)8t0aa=qn51RlKlAtDYMeU8}_qps|aItm{exzG8@f~xs| z?T$rXdn|MjpHE-N=cM~(wXUHydP403Hwh-|5Cc2kGW4EWxGe8e^KiDymG|8);TJ^* z&1|n`EoV2pN}rwAeCWd zDMn+~$67x=6cuD_gH{@*50Aa8BRB7jF1E=bv9v@>V?oiVaUjR_s+g#O1riT?_IW(N zkXQ!u>mLG@Ug6VsrgI#o;&-jKRTV&t`?rrzAo^HlpsK5&YPAhVE?V8`Vv zx(yF&f<>5_YDrPfc3k}rJjS`RiL2gl6X{C2siQLC#tkagj9r3R=`@*&edVio^5k5= z)L3Ec+4QmIb@|op*p$7Ms$v%EY^&81gR@oFEl=hL|ML+N6=LiosaaHtXL(mqheo%y*hyl@%wFE% zV-it@4W8D`!N-oS{R59-fHc(zG~dE$+`ZGnK&wny%^~UDJTP!Ww9L42U-@-7J7NEM z(KLR~!S`sro5=Hl1g!M>$5DY8-Gs}e>oXq*$r5R%6OL!S!q+fz{KU7Y)T<>*X{F7p z@293cju+yAP1$%ZlIlQ`(M%maXl>o%hHm0bh~h7#YZiK#cY`i_VJn z|1JUMnl?Xy&p)^%~hiqs|y4(3g{1Syd3pF5^3U;C#;>p z=&J_*=x&ecthG&_+aJFFe0{7&VM&~H1f1fCG)}G)b5xJ`tmRk^E8l z+dJov(~Z-wlLEJ&#|v}yM+mw;)*~`QG)&^|hjO|aM~I~X0(l&o9V5%)MF*`RE^FlWSkt-jx0f`n!5EJQahGBhgdmidj>j%m4V)=|+Yp^*v z`*dj=4k=jf<UkxJ@4&UL5322VsBd(h#;& zb4CoatF^%}a;Brk27wQX0H&`~2eayjtF)L+Lz$A*zh7LM?tGUod?8uOAm<_^oAu&N z*2`s>E1_7eh}=uHjATYVt_0Zujv-wBjS+r78-)sK#&!hDM3d3{h#4WWVN@@Lwv3^yasfLq z8yzWYB=owJLE1hic>VH0)`-^wL1QD5js(x)Uk+ORH?EmT#m{S zgzN3zrh(U|RAtqF!m!Yz@670p4mC&aWqSCxEXV>71(tUF`>I*@d5JBxBW(v&%Smv{ zr(%OVfj@?hNt!W+dj}*vE%wP9q4Z_=5D5H~&$`4WbN89``r7be4SVTVtq{d3vRj$QKjn;MKBOpQ=o?w=r?HTnLpOUwf+>`qXtplD*+0 zHOP)d^n72oTevkLqOZ=yCH?Yo-?)s;&E=tE5Vpd=3&CWX->J361C*4MYHxoCi2HD~ z93w#;^M_u|x1Gr?dm(M-%w{pKw`#^J5G^)()u~}+*d2m_KrljLL$YD^vPSV?Fk;k| z*E?V3ZG@yMS>C=>Za)%AF722aVz=XvpnUtlVR)Lbs%gc#Xx0+e1DG8z^lt4@U6Cj9|Xjk4-Vb)zk&uh(fpZm9+1v zW%zrRZ!Zac%Bt2tO_*WB)BG**1DjY@XL>d-&HBZOGi7@k-C&P{(b=FcL{sRrNptwr zIv>rb-wBfz3pma@E@vgYK<(oYjMzHW(J(VS>>$5y_|tpydlqqR*@ zz)sH{!;|RE`fu$F0y3&t$StXQcDTj(z4TEDMI4>Wd-{!Qvr-o{)HRNp)6V4#C~5md4`?sr2_VwFCFLY6u4 zA;p7alkgW+0;nt`$cB|Mt2{V41)*4vr2yZ}mle7FG+IHZ$#HJxYWH>RDdIw;+x1I@ zouTht?D3P-G5oU^?Bz4xeAa~ucK;>}ilqyB_EyO(0Sk%g>443H*J0gw?i zl&nBhs1%j7hwvp|PP|-;7+`m`is$WvW;|rf=LjPj zp&RAWo-M76l%T?iu-kA9`mxF=x0_(-0pt23=f2q%REE9n<4t-cvR32V7h!UHrpM*+ zAvz5Jk#66_J^en4eLJz$8TMr*)8CL18%RqwbAVBU z%6)5A>y-h2GeU2-Z`UfR;9lX^P61$x-Qp~yeTLyL9^(M_FmR99@DMH&iYWn93I%@a zBcYQk!+*<9%^!`tfwH^!gS@=TiL7Nv$Zk)>RAGyyFg${Wfq7=h~;TrF;& z@hETnW%YF%K3cQTD<4Y5ERi>}tW_7bxjB9}i7(Am!A5&{VKnvL(;Tb6?8nSvOFCg* zWGNg$Omx1C0&@Eqo9jvH7v-^FbKn+Z<657>3M;92eoxT5j3Lp>NULRvWx$YCNDW7A zZ4DRu?tnFFb@F0sl4Qb}5}zgUJN+AY=se+q)~3Pf!x8+SbsSfs&1r9|-(+yU-XUerkbl4PY0y`ZU%lz;ok;6TpUk$Yy z&8C+!ov-?*6W5~kjd>~e<1?}@^+0Z0JuzonZh2mA_Ji0vw62Qfdnwyf*Rx6d$J1g$ z$9qA+Md4)^t~|K5Ut;)UUyP7w)YCp(x%JCXdcXYPJ3TQ1oijQGmya7eN+>iTlOAAg zT2qnD=ryZK6?uWhvkgEwcFrPrTwQuiw}WaN&W`}Ycp-(4J!m4XDtb$%Y|YvdV1hl! z4SQe#k7N_`G_@o~S-IE`y6(7me+%8#?n=Sw?#Zi(Qmd;&X8LOp!1*c7E?5HC;(+yNFzzHMdu&A zD?^DLv`R0>8VM2x|$Phg2t_!>+!!MD)*2f_LVe=9M|yZb0lZL$12= zUwj(N$MelQ};!zju0vg7|dSPz|ZxBh9b^(zvt8hE(m&taES-=NY>pbmYBhEPv0jqj(|BQ z-kW=MRkVvja+xH?l&nk9OsO!e z$-sq`=~wD=Q>IH-m4QE#UKbiz-nPNO$Ea4Td?JUMcIrlVvvePH9T9Gsa74{G0x{K} z<1@w4lbqsg>L~D}MmCzA`)%rvhwE0YCx@-}&PnKQU=I>YEOQJjJ4VU(r%0|uThfa5 zVQ;fo98f6(l&U-1SjnizQ!-XeNY#u7*4yWsTpee5Z8BZNb{$DW|2=r)C(*(vD0n(D z;;&VRP23MsW0Y&Nqhx)|1{1GX&v$@Ys~gFmR09WFYDHZabkC}IcXeyxnTP-Ku-qO= zssipA<#2$Ve0+6WHKIVXP)C97nK43Z^2%~u=Y>ma&dJ&YBmTc9suy$6gwgRQj>v}E z0^z;l2Ct5fc%HM>CTS)*asHcJMqQL4?-I53QQ|mm@5*ZY8uwVsPMERa*-y@FBqQQB zey~f?o%ol^jY|7+hiCXt>!9|b;P|+0?P5j$hc!1bF`p#v*=}ZLy=(6rk>2@H(e4$> zItons6a>}nO%M0m3Kl8Q4KC{*{o}=pi{BKL3vD1;s^Tv`%R)AJS*|zA`$$}oKH%(t zYIy3`fj(z(_u88McAEZ~yq>u3 zK8M`8s=JI)i`jUqeJrRjXD}!@DU=O=$ccI>`djfxHp#p(9c~t39>u<9_I%~qKAauP z+bsCFk88KYdc6~tx_AyF1J$jRfLMK1H1E`0cQmq6OZG=D;cfaMXIGR+l<7YC&YyhI z`p~JLxy|(U+3%J-Cn1sT#%-cd4#L?_sJpgSJrC8zwK5b1BG%m%Ey)P#XyTT=;4){Z ziu;Wr|JpXU--Tw2)j4{Y8@{c{ejA|)x5oH@YM*g)@HylzAvB-sZXb%m7znZ6roZuF zh*Uc)rQ&JJr*Qd&M&T{=<&S!&;L2*x(R%m6P{b3*Qh%P4$%%V69hcy05EFr`+wt4B zD4<3L;pyL4qC^sMfaUsJcNYNlwfa(4kQZ9_{%B9bnwOshqhnCtQ;+yV$9!NX%VN_7 z6awFqpjVVAuk0sawCcE>1#SShs^urZJy>slGz&0@p9vg<2S3StjZp**IU!D|>RRDZ z5Hf?~p3FI?Vflchj;zRB(Cb0A=YuAFN*KQ>ZvG=3H!=p6u7r%16jbmIzHTVPN5GZ- zw)VD`hG2z|^2-yjI>6XXM=`lf(SCinh_4e`(Uo2IU_5}WI-N@o#I648bdENji#*}h zAhkDz@SV51=*5pNh#{P{J68^Z|0Dz3N4KjZgzvtkKVi72T5*upX-SZ@^6Fff`(x?* z*X~u{*;Kzr7cIJzDU7`UuT{=0G?@tkUM{_MLdQO1sFp*Y;%Zq3Ppmd7N$EYF53Q76 zF&68{>VA^|q~=4bfNK#{$F5C=@BZ?g@a+3v|5`=fVrh;ZN8z=|0mo%xIsiW!g{R+K zdI;=qbUHAd-Yn@Be*H{Z4JuW@Y0JK`B^n{5W&9V4bVOHi>~oE>wJ+qhS*w(g86Hft zhM<&=Ywp)4H8}Lk`^1;;U7bm-ODr>!86A;~d+X!gB{|V0Y=<3B6p*mdT8X$#$?Hy;gJ}T4BuW7gNwD4`DvFP-u#vA7s6HR8MOWkbfH`gd#7nA_^cxM#6r?+Xk z=y;EbM5onJINzh-Bg9)UDhETV#p_$0zoVN;BnX;RZS^Ehx-9_X3vHjwxY`zGlX;2kWOL%c8-s z17GZc(?N$Va)tN2N8G2VcV#Zp2qz;5& zO>=5YTwgx7;Fzkj@}DugD&`wCHYQrXg+ve`6x``Fb)Y80>*)etX1_z)ioE{;41 z2q*_Ze>z)zQzVvDi`zFa-)^qSiC?(I6DhGEkobXjfeWxbnsUnaB}G!x14jSCX2+Ad zqp!@4t0fWd&N2i9Z1<@>1!R$QR|y_Yp$<6%#|!47>=kv1z@ZoDF4?yCG^M~)wGyE9CjYb>mns3?^-ZHF*J}`a{C2R!1Pu}I5JY(G zVbHa>M{j)@4@Z0qZ#VWGgw!UyVrVTs+p9MginaRerk1>bbE1^|lH=gQSGIenj?87u zbd=o6aB1T%U9-L4=QdOt$G_|vzoSGnKWN_p$|A;-3PQ%DK-?Hy6wKZLfv(O_yNu;{ zIC3jYy_h5HX08L95cG8hIN0%?d5)`MjBrdgml~yLYOYe@yFL}@#LqG+9&RlQJIY5( zfo!^6M_M7{m+b$-Z~2vT_7VmB`Y5m`dD%`|31i=U25bWWU{5r9VuN8zD+h4GggXWn zh%6w*Pypk?(R<+9ks+kGD0q^X0L%f+b5KrrCvfG^?npb)-L}iP@O1}$fWWRI!MbwCQUkKL*cQ`ldeazm2(sA2TdIWUpgLYaLvzwlL=C@v=X0{{+QPc!?nj4 z4`k~;FM|Jfam7=q)Jz9S98V)X_o#-C^vhPD?6SKx;U=v|j1+8-gHbWYFH~{b5-EID zK7j=YNx`L_ptds{8WBn5LtBtoUfh{7LpG=vu{YT!0_lC2l6Gs&F*FDCGmC$mn3we>p|ym)nRB=7jQQcKx(1=H|kb#UdN-^T2zAmYK+Ms zV0AGj&^Enf>42mHX1c=l+&6;tFwogRJSp?$`J3*qnn{$?F`dkH;WtP0J;*)2!5S{3 za4=^qMY~UbJb33SKabjD%a7kSLy`U*NvNr%32Xz=6@02|eTQ=0!Ttt+IJ1puFq5>r zESXMm73C&TW=&h$rmN)@Q_rDR1#_{O(RGzK{qr)Z%7EwFxjS#qB6j^SEH8c12^kSFDM zh@I4NtEYmjqrU3bSCp;i5%v!&P$eN;ZwsjcNvrvfnmD--Ubx*HcxGX>CUH4hiR$*- z4@dmX87>~mi^9as)5QxpC69^*$8>b0D!D_S2?@%t|G@;J2Fx)qdI{TUne{a@dYrUY z%C6R=f4ma9lZefIWH`s0#`&JC`>}(pB@iyK7Ttv15P>1k4<4{}K*|av2hqeRo_x13 zdX~B!rJa`b=MOWN_T;NV?rN(?8O-l9tlxtn46>S=f_eNgqb^a(Bb_1mdQBxTp_z!G z>)}z)dfqA{VZYvX4wq~7p{aN1G@^ouMDKettK;FmV)V>cfw%w<(5Eujr5qYLdYS(L zRGH@2sEmRc0)-91T;jJC-r2I1&E>HZYLzTBIw0TZL<9UYdO3XHiC{tYwN(`^RT9fc zjlOYYV;b_@5q${-sVn9Nx&0JSQ`vGCo#sDg5JVOOwUn{^3S$Octi_8{lM(P=DL4kG z%mOz16btt754vGb=O1`LO5&)}MBexaMdCVsba%)6!pjR(=~J*+Bo&Pg%N&&QPiA1h zh88E$_)oKqI%f=l&EN(BEfD1o$ds05IUDMpbVYJXPtbCuQvG5pHekCwfVjO9wlH)f zx}XS>5FqU~NvZ>WO|a8H6$n%;9dd~}sv9F}Em-elsddJ+(Ixb6J(tt$44ok^|^*~#2S@3|FAsoFl9x82RTsrLY==p)D$8z{~J&z}`7OL@ic zs+_Jbv*m=|d2;Oc1ytd=twq*;rZ?zK0kG4;21`M9Y@mwx90SwrU_)M)ujf~c=d0737PrW1&X^a`+4&} z3A!X0cRU{ratD1*L26Fay(;>@PH(ScuUo2XpVahc7(#~)&5F20Mf0@ccLY7Tmued9 z@L>ygoZ9L22hDChPvbKASS<(k>b6^tyMwt7O)dMU(_0fk^AG#MyWvjI5Ln9`Sgpi8Uf@(5`S1X>y$OO`IkPb+`%vHu)4?AwG zKsUm&neHlZleHcShp*IF^^;dPxM&aClADqEmtF6MJG+pZt#4g3;4>}`k6z5C!4w9V z8{ABW(^%K7h#R{QQ)ZFY>>`s|mq?SNcZE!rDIZ>{q6`ggPp_2Ug+f@0j@IUmpoVwiUp5*&Wg-Xk&{N|aQ;>Z;jtIgTmPz+t&&$7BDLOPyeIuKN7I8}7Ld`qM+(9ZNU(3K*_+m13-as5jwnjXwKTBW>bIC(LTi=Ih?4?eCtchxR)Z%BDtjtqykiG+WuEvZ?iV*N&auA-=14en1Ip z7}Mk@5DZ$UYl5D7N4dorHmhS1T*XB4|t$VcpoiVqM?9qVwR+qQtQCspdQkeS4jD z<8w(z+Z+4#dS$vL?7tg2xOeodGKT-cA%UDsbZBt^tLyFOD>QVXI=^X)qnSAR{OJ1KFSJGoqpz6VLQotlzG!YPd=Wm;Y-ttEl@g=^PE)D3I>6 zJUm=n2bs8Z=S5e0D}k|$X?;_FT`8`6km`_Bb*d7&m-yWD$i142I|>7hUx@oeuABDn z`SCmZ#^A_M+@IOe;pL6=p)J=q5K!s_oOgPXjTG{fvSIVv7GM!0`rIPPtpZ~Kz%C|YIf z>wkQadRYW68oXlXY0J8sH^xa?^VhWXVzw*4T|?pO zUYV=57?*&!79gVurtcvzi}|{J`&oG7G=gu?RxjWCT#IdI;Kdy z7l+i}zfD!PsQ6#+CY1BPRRjggVHcJ`iYt!F-SE}J`HA5~=WuwP+6c<=yEUhcj6g9n(P z2M->7dy0v^5|M3Cfc|<6dMB^>6rCVXEkn^|a<>nMiHxDycs|VIVCr2v|kcF$2 z6%b_Ok;;e=7weu<1u63S@nfyr&aYbx^_=cXM=|jN5wab-`H{ZRrA(!v=85*O z(Ep^qTy;-gW*hl(u8{cF@xGvSn6B*|8t8yg?~ zlH)%u-&cSU_*>iCwVG2_x_KRPEK>doaK2{rAt(GNu~=cNZp_ecyCh$-4q412C zEH%dgN~5NO`EF_!e?F^yNaCkVvo^WX=~Zgt(}At@zDX^A{v-PCOsP8UZZ!wF#fkk1 zD6{v{d*#vN)S(7+GaC~24lk2e>+!2Bta&%YzU;$~FqIdM8J{!*R|n~l-%N#7DJSZE zpLT{2AcHt3v7=pl7^t%SGFLi{bCy~hLtRH1yzT|>vQF`wB<8XjPo1pSikc&%IX<(Y z{4;u+1ajd|jQMopd2$b#|DlAdEpe7XrPkL;Utik~ObObp1IR(XXp^b|{?!qQTbotz zDmc5*Xj6kU!=CqIV_|6qAqMVNnT(DZM}bi|$C%dJ?_e<=Y$6`G>qwdx&aWzx96L*= zzc^EmtEt<~h5_#-vmBgeB)yr+{a|qjibr#-zph$aPm0a4FnKO2r|VaW0)~WlAK}_U zVaVUmo2Mp%;X8wNKmVij(9pg@g{3s%d(GN#H>$eSEqarUOH#?@ln;_eAAhFnU>}t( zr3l^Y(3_A<##UR1mB-9SN9(@$M^SO(EPm5`!XWCT`lA5rh9mXf*SV<_H3ovYC5{}| z(N<1MOl%~jw8w`7ob1FS9OP zXVz-q)_1&2zr`yyy~jL;HWC6n#>>pui61pPgX&j^pDQQ@*1}IGWR+qR*=~|t&ni7n zG~iQJBE%Ri&gTdD=9%_er@!f5kl=q!pYKQ6t<0L?UK2^?wjc|q9sE3adFY`=<0kpC z(Csf*4Hk8Jy8AlZ4uM1&VeHTY!a$nVps7>yf{#5|szO-!s*<1CCcpNdihKDDiGi)N zC~ZWR+z(kTDJ@-X`kBS%S~<<`sO!BRf2;%>P(z%k!@Q!BD%Y)zw-?j5i60#tozOGX z3LBYRq;ZflPlNpQsIxpXe*Vx`(Vk-Q^<+|jk1~>LSc~5oQtF?ImrFqCm5X&4ehuP< zK!vP2?SB`6Xcn_uGfy6!Tl2wGttf+Tf?eZvjy}MkHe`AvTp@T+EBde33@YUK|FE0x zUOfe96)oJ+@lD7D@l{gJbv;jyeGtP5DM12(2Noxr$VO#!jB%0Rdk~0;vAb4Pxug@F zTRFYzFEz?C-S(@{!?fU3!bU!(2;jKyrEu~v?Is;Pnhh^`mmovVwv=Zve>XIT>e8jw zY^-7qbaH&3BS|^inrI?%pD_whUW*8mpJ+VeNEbEVI$Aa80%mvnbTU=m&O|mCI5y%n z#0-jqb_g7eB}}wAqXe=SRguiCW)?;5RZo5w^wJtT5Dt9{vhV_(D7EVI1eQyBMyQng z_gdfEe=@o2dUs_f(fR`;=C%q7->7qb{N?%DOtAPdI@PhN+7;94-ym2AW7!AEDI3kO_K7sjbYJi)ofZZyOLb|6rNSM zt9Qqi9i7p&%0i(lwhmgnujg7)^~$VWkAC7{=5gHC+37y^*4f3>n?}Dy__KQ&Nl!gD zQ$&lsHTQPd6L$HF%tE2zm0JA3RR69HS78_OzL}~|PQmbj<|xFa{mq_cGi{*?>Gf2( zXeBGw15vffqGi4Bt|L|1ioAK0evCB!8_)e)y+!L!li1_v@ZqC5p@|yqf z;mE`yJju*&f5VBLd(GG3PC)ru6vgYY;J%FM?GJNy~O$z0Mf!R3@r}@OUoT^iW9{nFtSOIW?s_Hzj$L4}XClw#d6u zmA5I?vz@$enj3(snCx_@gSYpZ$LL(Db6IgOvEt zTEZf|^{HZ>U#lmFY$ywje!t=Ul|wb(q-_-eyMU9C&d3b>RhrH;l59GlGA}S>Sab6# zQ{HWztKaHObrZl!?c@(F^c)@C_*!i0n;(fW2-po!9{$8KuT;c0xSKgOKjB)f(uE)g zum*jAa?&TKVa%$4+=j0=8fgt$E42s3>TYr>!7_$`rTo1p**lk=sV>~54A5%wnpd8Q z%ad?U49Z5q0axLxP2$umbV2)7sFIN2A#{6jfcvVJt_~l}}|3|L}U!b$DrSQhj}~s6^s7eTqn9lXgwPPI7z)L!wMAuj6)E`U?-r zUgAH-TSltVtYNEuI{LYF|Cma``xC#<%02WxV+pBbS#JKjY64LVR_Zasw|=nC46Gb5 zmM_Pe$&p|=H*i7bnPX$)pfy~ejUz>ld+`qYzag=#yH#VBFB2Re@=CHcNA z0q+v={Y>NiEHC;_EvazEj=rAKtBzGU03QMg>yCB9D^Jg6pPe@L;`!(#%sc7$4?TD zM9Xor6vir-N=n5_%Zose&};sNcs4OfGo7M`2_4^8xQ@qfO~!K_%mNp>+t*lev#&Wl zG>32VS*s8aylW_XaeyhFA##64_K3|A!27+*TfNkzrl8sW?2Jh+wWZQc}5!wv); zd-y4&U^+IS8qO~OQ?Fj|;hN@yVOtJY2;o;*AJREMcXc=Qd`nx5XWZuBTd?5>E#cts z%OlLP7Rlqi3^+(@40+#^abrz9+fk^|Ah`M5wjT+tNsN)3CSg&M!87U90sqhcUI-glWZ0RhPg~pq7nn4-B`}#6}x_2 zhNs-9QRAK%g2}cYk3VGDOPahPKW08qeAlX7ox)rKX$7CNt9E}S@^8Yw={e_%k9hOD z<45-boEVDgHH}z~+mf9T%CiWYQ~GCSw3fXapOKb8R2Nn{d#RdSNl5w1kha?L5|ePv zRtoTJq`4AOpeL06qQs@%6TS^nhMLMmE~TU}aOXH=wx{X(OPNI(Erl|LMkYot1 z8({Ucg0_(1o3P!-a=>r$%Achg7d96m5b;x0ZIl92Q$=;Ol8CKscjU7{0)H69#bDo) zM0eY=ldFwu$+Oz|+<6qeB(VgL_?@YRy)AMX^^tC9_>5OkAuM*tL8P#*UsFKoDX7;0 z+C!$3Zl150kIuPMj?kpA1(2ig*W^r%Y0ErGXomfD)v^7#j8xAYmEZa*&O9yFxb6z4 z|HIGw0>$_t9$S`|88LMS2M2HJU3*-YH!8j|Xlx7mKe|=4V#O-qg`e~wPZs7f>qwbb z*bnqEb>^s(Z%;S}{q7P838JlgWQEkey=OBu%weG6s88>5?Ob_l8^5$7(_W4%8M!Abu*)8N-y_~!X3t0+Cs9L6V zq=YVOwuz0J`DOahA;Ezpfx*I`h1pHDQM_gJ`d-AjJkhYQ3Ue?-W4CA7HOXyzcJOqw(H^;kKhe1g`Dpz!7_Z|MM0-y;x6M9XbINxPn$l=ED68W`tUqO|&^x_UzT8#U z&%~T>N|B!7;HsjKbNS@L%xq;3VZ_~SR@FBka(S7N@IuYHtqOZ#6@Qvjg60AnCz@lc zqS;o!jdw|$I-%(^!yuGpPL(YitwEgbj``_)(@UT-Su0TDcI0)O)okLxKUyMeVBpJ* z-Yn{Rse5Sl)^*dlT?=DYRyf@y4x{NS?+i^{7?mufz`gSa?)9#a_O9?>9qHtdGdNzC z=Y~Cj^&=cohi*MjvwSo9W+2t)qw@mcj&^!xXX-I;p(LY)(?|N5U+$N5K~xm7t}q%YI$l6q{Zb0Uu$Y$xA+ur-!Il|aO0zWrpHbj?ixB#y+2~n-1=WOvVPA*uP z^v6l7@Xo3FlN*BgR*vWkh#sAfE^}jTzxcP_;%@h!XQMiCY+1zq%xm)^Y#~vKIwuO!lr{Z(jKm6ld?jkscsby*h;NoA|R(g>?jCP?n#4s8$!98flcdk~eJs2=+ z`a_3DCt2m$8l&uNPChat^`urO$15Tg(NAUY@xy@6nrap0$}d7vQ@M;Y5!Dl~XqsAG zUE@;EjZ@JAx7~`D2|YBD%80hg&%;sxrK`Y+W*CRh2Ozm%Xl<*PKbFV$duah@N$sTm z)lq_AZd)A^Q#m8aWKsz|>5)tO=g!3{dqtPv>%rNs4p{urT!*twkLr-THgEnX(605H z_EgsPmfAK7vI{p*G!jEuq+0Saaq>xU)9bDC6fYkYrT|A8M5{=OWxnjcboufchpYLZ z!?wKsMe2PwnO{bAtXH*l1>IfO%T}xNuIbz76v_K-rTQGK-ugMEcX5O!sut~^8-{K` ze9Rk59B|*8zM0lU0b4UeZQ%zvIOQ`_{Iy(b$Och4A=7xB!=2HH+1gvDJU_A6c0Rsm zBO+ZZkTeV(72f%2N~RJo0et1#P?rQGk5A7FFn}_X zcG0uQ8}C>CL+K++&qfgEv*NxL@wIWB94S_ z4pjWJ?p-zZ*P7O)OR;2+x9DqB9K1G+qceyt(&{-mg!)$$%u$3UVnlh|yOW0wN3B7m zAxlztP85Cu^B~6yFkskFTD|tQ5r8byyZx?_J*sIY`%Mc_y9?N61OikcA|vh=K1m zp*&U09#atvSYwQ1cc7N2r&%2MR)tsaO4D#;y#H)Ta^=|M&T^$$Z^$^o&0HX1y={>6 zg$@VcaNtK`IgPZbSvT>xpD04SQ16Erb+UW(tzkTmRnoGt==!TVWL4s&k`bk9BhT9I zWgty{Z(O=d>H-A`&t-!3*6GRlZj|q*QJ8OZ&%*|b*SQ5tzwQLs7ZA#O>EG%}$BF(~ z5z*Z%LXue+0#Kp$k+N#%=6uA|SwLPK&3H5Lkmt0Rw=_MG z(a3cD{6eIYjllR(S<3KQ6wz>tRISE9<)cQZJh|=0{7BY^iFNK%V_n-Su7T^f!({|z z{QE%*)@)AHH{#=D(^ALh1gKObb;G#f(h)Ba1&QU2*h1uR6}eFPUmCB^T*uEwn1`D* z1k-+$X*6{v{cMAvr@(n;N}-3KI*P%4AY||ZG+0OsD8nV`pyJ2icwya_)ANaQ*8D0HntcXXDe%h!RTnW$EOowxLzFJlr&B{DbWK<9 zcb&}lm={M$;Nwc-Q-x`K%H`qtXR~3oPx)eo2E>$uSO9y|s%a{C^vdL_LWq4LOS+vp zp>qPLr65&?%N4J9Qz|Ng9E*B7nqL$t2B6!^hXKpsy*HJ&7N8ngGv8fX;B8(gct9xH zzoo9E6203k7<2;}o!%(Sb0`LsB7={ebXu>^mUs<+1Q2fWuzF+%X&u_gUSC}MxEL_%DM38`=#o3EAM>U>OE|ua^v~%cd z7=%&&BbhJ`N2Z^Wr7i7eKoCe`r6#UeUh>j>z+5I$?>%@iyS8mgZ2Vpy!s#0MhgNj= zjQSd{^LcIAA$JPtoT&E9=?TW6>F&5pwp77=K0l-Ep!N>&-B(!@_rxv5_D}yzCqfP7 zMEGQ}o%alSVu}icL-Jnl@4WZaY307Kz&nsOAJa$d98Xesf(9jiAyf{OLH)`GV-&1rg=Q<^JYh3O%Ax-%JyB zacK&T#D%3+Cfdctt=wPkZTzA4`?Xaz{xpmm>pE>ws+ypGHP8_I0~2Ts#u?aksyLhK zHkWzv@2BWK^5*|^2E@jJ3IpHDPqAm&P6kY;0BG(9(&D7RgfVhF3Ui}O&`2fZ6CBw; z4=TXonL!y8WWO5(wdkbZm`Hq4;1RI(>%4825QvV%dA{ubZtihoa&c$1f6_j`{8>hC z=rjM=CEn3Bp!8VA^yXYMcKhPKXL4AMS<1JeS%34S82PI}v&*{%EOz9VG-EQQ7luj#No zo}SWwt^wMQA^K5#h5}Wk)o@mrJ?ql=MOprOwgyVLH}HESljBY1AA31k(mJw?mPeYd zn%SK|JFoC|bouviF!>c%BSIPvH;zhHvr{zE9IC1m?zI6-q6zHNX^W0(OtpCDt!FrF z9=iZUq)tJT-P4vueFgka^2<9RO$Qq*^A~_qz#XI%)Bj|<11DlcFf&2=22S9)Hh>8~ znsUX@dTG5ema=uUtYmJSKDZ&U1k%~|fuFUJ?z&`3vG()Ei@cw;^i}$qPLPct9U_gZt11}=!r9@8V(rl zSYVF*)Mm=6ZQB>6dX_7_jIUiH658%;Gr|UUIknO(H_SR1sM)-9e8h<>dq*w3L_zUU zpo*>%Z+_fo;srjrb5DzENI_n6Bd?RN^b{n^_G8+$zexIZojr3loJ{KaTri=Ey6Idb)DR>E1H$ACK9ir_kEKl2(7oB&i-zhv z*V13?go21b%qK>oUgb4hQ6}@LLhVj+WV0koSJJw^4n0c^Np7J4K=cg#Z%LIalu zu%9Z5&7R1(2gifJ|2y?f(91S*$xQUBO3E#kK;m0XgUbPG*L{7;!}3tn&5jcz#dN=uwJx4v$2W_SzWqvq8J^;9aD!|plBT1-p`RmorGMTwo5^=CJI zn@f-C&vWx_h^SQd=7Wz;v_#3zXT^ANBI;6&-&VO(w0ijVcM#04s4Xjy;7D9&IF@Fw zPL{bpD~E?Oo9xT~isVt6S!ZP;k;@WHN2!bQ*vQEi1)>pX=QTM!^KAN0? z72ItWi@AMZNP4w6TG6{*v08mtB4R|71s|17;odxYU?+ZwCHt^So2NvNJ4N!I)b@ep z@$~qli!MoWZxWdOjdV;wQ$FmhLtZWp)Exx2Ju(=?uLPid@JwX51d&5tBKpw@j+@tfc zNlOf-OD+;%fm}5SVF|VHrx*e^%iRv;5(BZI80yAHk~oGwFhrQoB3PZ&@(uy!w@}p2kBv&OGki$fx9qs)PlYn_Lu!Z%au}3gg&dd)l2$*+kYb%GH;=Q=+ zN?qgG{cuV5o!DD6D za66A)FDA&eqJSqU#ce!8JX?c`6@FisEX!yp-HQDae>ax0>8Zn!ERi=H(dUfP^|iO zk4_fS7g9>8k|SCO@}?5Z78Cz3fTRH;&>kOd{WE}yu^cA##np^3SzU5wAuutlK>8H> zgJndxW$(f`k*X?z7-csBjlnu|s?Qqj{D!~WpjOM)jK3huCwXy&q6I9IQ6dxyfy7~v zmFGe78Moy)^FM*yKvaGfcaoZ%YewhQhlh2?y7Ci4d=G`sD%Jzb334cv+mpN#U#1YW zN-%p59i4Xf=D6~oy3wO1{LV`5U;fBq8MI!2j%{&7wEn>S)pp!PBp4!^m6he`UBAv4 z`N!L?!PeLlgn@=7p?_9tRO7CDo{h&aK< zyWS_J$L!LY)z@CAhT^b$J4%1c&+CYg7`~uHgzOrbdUW2Wa+=n&4um*cGM8U#tT+Gq zdvmVqH?q}`gX0=vstBu<9V7+|OAe*aOisMdEGaaGrnOd6{fH5$G@z!=L30BMSMFbT z$)DOYvUTQ;7GIhERn{nb81rZL(&yi!mz{=Kp-~75Cw^9}nS|+x`Z4OLH4C$O?UFBU z->o7S^n9qyaaW{Osk^^yPxRY6vh}^?*-gwjuVIUUHIua3ve(l;?S=)SJa{d(E&ZT- zYunMvhmQ_Ql&6-nz15N8e?dN(r8k{)EGx6Dh{ruKtVz;Q>f zK@c@T1q#(-1Aoi|Q?brrhn<&fKXF(u)DTS-FP?Vh=0e7|fS=eaDQ{0Yza)wXO!clg zgjdDa*m|w!mYa8Dde}`yb?<9Mcx$QaRofXXHb`@V?^?n;f4dj1gIp?;ZB-g5e{ zQqtd5p~97fQ>Ham{yQ?zfot=mVzxAw`3F@X>hNzL*F=Ak7Qqb`WC*_qcc7ppj_GWi4yL zxpePQsNGxaXpXr$*f6PdYx(gSs7bvpOB?@1qAB$4WO$n$I@pZ(0GQVb^CBUbC*XxsRBFhW$BSbFu_Elt0~` ze%ehbtc2a&W#xrHBn{*d?+C9xmepie6OKqdSYQSBI+<;4i@(e=aj9Cb8@=@UjS1eL z?Z1+g$Q}K)^sN3H(J;K71dJm-&wPA&T+U~IjIZr`joS&3{dK!Y;`x#UrB_btn!hFP zK_q_eo^@x(C|WzT5{2w>JxHg9zc6DHA!)mx%Ytu+$Gr|@s`Nu*GQke$h~Q4Sz3vZn z&(huYT%J%!dIl3l)K=b>t9o9w2u#3`oZBL_R_#0R-?k56yY9qeqbjvg``vA&b$qJ} zQqAH;q{1kPHpPgsHj?*BKP3(PuA>`V4tEW!Gls2&1^?_;uF(v=T-~dag?4peEZ-<<;YJq+RrhOqrW1wC0j=1$kH_~6Q-y!3wam)Jy zBLcNzcGE$T&MBRj>i&#*KP>w?vJgS&AmU#ue%|D`lqxE{pd2MpJ(Sgj!NlWIo_3>Y zL9~woItY3oXcpVtybpz{Syn#DE5V(nl)by*;17u`h%IjXa$csYb=u?WEO=ENWU}*p za-sdzZE~u?Sr&Po|3Vd0)%7$0w0NwzXk$MR^i#-*W5IvU!~c5kchJw|aR;CL+(X^rvjyP zw^2=<^Is->I&P8;bw|k(THL-CZY_*ND!38f_)Tjbo2LZlsecM_slQB(-Oe0lhPp=f z>sc(K$SelD=c0y(r!@9N)Dp;jrh)Uca$8+2@nUk zypyQQfn668604$1M6SJZ=D`ERinCDbx;+#e;|tVg%nqHc@h>CyR-__YT{pX76%Zou ztDVXr*KljLrbUFzN2+!k0|0;kr{UnknABvoyPi(InTclG(6lt??_KXK`djScQ+zG= zfiD3Nv1a8UOpkOAQX0YDB?jyK%k?dAo*lU=f?T)TaNOzpY*yyAVTX`M>cR5VMyb2- zhTE-}`;O2?Ew%ZAwY9fki46n}k95)n@uBCUuUBOd6JbA7QN|JiVaFk?_l6t^V*E zF_`N%AXcL?IGi0z=d-t3`N(NC5T+mRr;thl&NhXQ+B@QJpWY^|6Ig=m+^HWY>lmy5 zk$;zot&HT7s#p;U7vcGs4oiMWfHkEuL+`Bay7d!&Y2rYUswK^dj6q!go8G* z;!}in=AYim6@J`w4ep8BsdirBt#zE&8Y)Wk7fKndKyMt7a2m>>Hz>H=-~MsqbVoGk z@JQ_82?i#nO3y>=)m5<3P^v=a=H}B^LS?EpHV3)*e~kP6`#XzprHwz;p(D|9b2SkE zzT=QlxGIzr9y9b$c4tHss4(6;sv%p}UOGGEPtR}m;Q_c))6uIQYuBUspG;_5?Sy$gN&QXaf+w)o3* zz%GoF^rcueD1Ox*w6?_S2)JnITc*c_BkL?KA}N%XUJG0vIz@_$jb)1 zIxk#LT--jSe$_%m`q#En*4~}q>^)SvsQFuM0T%ns& zF-OB2N`LRkh^Xhf(qoQ@4ooZxgocOH)sD;6Hqau=No@&>cJuaRg&pAXlx$ZlVFm&3Akz3PP`PwO@N2D*}w| zODUCZQ+rdPMi7dZjO+PWg(O-@O)!;Z)O0x$6KiZb@>~KTH@(3bIz4JZblUrv$Gq7`SbSAJS|J^B&Y4s1S(b{va!V1 z5l6!XNOo)8`MICoX0KYKP+_I zsY>CB;JZ!}Si`i_dLwO`_MBB{yS@G`lKf{zRG+=KD=KO@?3tLYuYR2SMg?H?J=o~< zO^lHm=4klzq2;I@`-K_yGt4TIySAJR6|vvdOnwqPZhIiCI}MmM7&}%hfd-J6Z?I$# zdUBS(-x)K`V@0>b#R*6x7M9`FyR-v+2a*kgN&gZVGKdfm+GghT$P8v4#939+h6rL^G;ZrYmk#Zy-Z2Hnv&e}4c{Wh7ca(pIjaOJXa zy))bDD+*$s;+QVodQQ^qxN)7elE1Le z?z1lQISV@Ud2-N;?Ml}8!i__vtzpG?-ygsxq&n9hplnfCXNE62>g;;vu=BW2k4AM; z2w7pdt}am|9B`eLDWkx1N<5AE;jrbBND#Qxh4lF1Jo_olVWBls8PWJ6!(UkKNV9ce zA_%3^UFkEbzSvYoDTsWv*qTpJTy~dU8j_&PBNiVfPQAYK9)qk3L-cUAD#qpnIZf$p zNgk2?^J4p&nE8beQ>L$hP$eVJX=Gj7BW~Ggm!FfmBlEQV)*@+WX6gkBPHzmkSraaKoA=R;-*l0 zG7~02-3P7aD^M5zvPV%Hi}7|k`s@8ukE|=UxK1pO%8PO8i8JBeQ^1F*wC*Y8rl-Zm zL2Kkr+|FIi$9zwD#;b8KR~c5JfuuLh(M-@W!aftppB_St{N z_KX%#YOq_}MYp3SD~-a(kM7iZvxzIHMO8N*MyAo*q$fNJTfUA@;JZ@%C|?@9yR4ze zu6U)>l#Cxz%)l^rtYTa|irxzQV?kHvN}oB)DFMGvvJ_9u&&%XTvF2C&rFMpzwC_no zbj}~#*o-xZ?~mud%r2>Ki)?v)PEa2m4*W#_WoDB%m1;b#s*;D`1o)1;Nz{zWdz{0Z z6E>uX!QTA+`!k%#99NsiTE&k)7P^v!oH4qH(QHg*)U8&9-e0^@h*f_Wv*Fgj_(+sw zy=>=QvF~_l5@ko$RAy*sIRzpOcKhT)VA0yh_k!i~Bkc|Z@3w2c`)vvX&>nT%GCqByYkWRxZ@iZqu&N#})_ka> z$T(atr>Km<#WmDuLUucAIkn-r^5GRrA*PN#>lQwjSPZ8{M=Dop!(?5Z)? zcHOHJ>QnwH`%IgKThZ;-Q)(mDHwJ%>EK;U~Gt-FRUJQ!bWq|R;&Rv5`;+P4peFhTJ z5CY1M$06#R<$z+Pr|Xnh@*zaXuD7H;JgLZnu^tbjZHjRD^)k-iJ1Te1H1*}%$j z0NinO7hlx0ci(y0`O`44GYM2?UGZsMFZi#~X35=$kFO{jmn|NvOk;AMb))F*yX_4% zszoM?b@IJ4_aPo#@-pEMAzK&QDR9&s-nkK>%tuW{@2I7&G{;@=%1ra1x&(VNVBzZb zE-DLs7R1%F5f!6@X{#r&DZ~|!8@Qd2nH=5Oi{;T~e5)qY;{IgExIU|>{q@8af1)IQ zhDCf$fd~fyq(}$oH)1Lpu~bbQSk?hvz7!9w22B|mt0bL_7b)j@?=pBFCkgXd**)xe$s6XN z_i?7?MKz&j8T;1tc|yF7rS_NvzR8!IaC?(S*GJnfd#Y=H{q+&}qTj4{e~3wxi#j1$ zVXnX2$9SHW28y?nlV)#_Mmu1+Z@r`jV%I%m6n;aoX0pj}ei=HH!yKQQp`*Ux_af%; z3(X$P8J8JQpG0kVe-1iULOsfB52WpqF@`BPp!Kx9e8GTyp&|f}La@TD69DciUy0HN zK6pzvcQ`b&RRV8GA$IEGtsZ4l8tn6(1J)%ZWP<3XG(?WwUV@C_vcj~I!4gS89|j! zj>0-_GMBEbcWXI@zQ@=8WETjxcz^>EeZJ_=Ke+u9xqZ}|ynR7PxobL@j%S&{1g~nh zl3T2Z7Du*TU{nzL?VU~-@~6k7Fe3(Lx=4TICqN{^Ic3fUxGp`XBwVY&yekRvYlaJ1 zg9~jWl+so)0_=K8&vGg(SNXv&QpcjQS+bv~*X2D6BK$%JBnU03LsX@KVEzu$6fsF$b)bZhsF0iFR1l-o(D@X)z+HkII-`EI) z4hPqz^rkV&X3SawEMt=_xJMj#d3pQ64?j$8eFf*Md>OroB}idT$b6gW(F6Rdmx7;I z*VbZd4XjXJYZ(=aORmgBEnWt%of*{+kRHI&Idzy1)FvO{Ixvj3HBH2!QJ~r^J!W@ zOt@Y|(xXiJhoHwnP@#0B_y`>_TsK#d$eJ1BnR9cUS6=;2{oi+As;*IHGJ-z zF>ax_bz1BmuVH&mq81^+H{v+XXYigtCZ;J#oa-l@811Ln?djtiC!eDcN!R$F%i@hj z#sPo9Ot%SUx;bbhdz1Db2%7IxE5+or^OwzMfK?rTsEgMnC`jI-76s<+3J`-kL;{-I&bU z{_yd8<57YYY0qleHS!z!74!2@@P*IiIIxRzRo0!hjqMZuj~CqC6I)ZJ4@_`Ny9lO3 z2tV$bX`38Bqu(!1G{_&FZ06l}De-`6l!To`gP=4|q*=*x^CmwgE(O}>u<4KB>tmeM>HnKh+{A3Z@X{{dv?8U!)i$V{rkz!V)p+^%5JK%7+ZL39LjpPl0gyt zdv`z?cabL;e?LX!)t^|9IK`buWkZ)C+*o=N780W4xNEy+V;8fJYk|rWPvqDB8E(*- z#7KlXmUDj^Zmr)ml)`CAKDjd`wD^j5V@oEZnLPO>p+PPKjRBIuxsj@pvQp^xdD&IQ z3d>(9+9M*ZG-p)ysvgGirR>ArVgogVNFmuBxI~bL)c37@}|;{5u#o^EsXj>My!&REZb>$@u~(BesXNkmd3nk5`n6OwV7Mq5 z(WnmqL1^2 zuGSk(HC(&xmu<8;^IuJATc;g*Xcwwgtle*3xmjAb=<3cg{bh6020f=&<>BFB<>Z{& z7={YCuE~kt-yD~5?uEPWOex33#cfz{adDmQOsn2rooaZ>J{y?)Pb`3^XAO0e-|dy% zL_r*G=dY1W(bKD)@?xvOWbgai^WvPWn;XcJ$B%6emfMrIm#VB3|CW*|>d~5mFf0Py z-WZiy{Ffbm-8go0fB2xN2a5)>y#1n#1uEnuh!L~9>wx!)UrsTFb5fD3B}el9a>*@~=JI)Vm#A*aQXru{}mDJd!Jr%yk=d-oZQ zKeN2+TgvdTu()n>Vf!zG_jjoK0rScN;6fw%I;l9aP$R!cDiHJUdj1w<)`=-UHtz)E zi0Gy>F)>+RUr)P@2oHbx{5fqz_jhtWfZ@P+aa-G8Q4~Vx1M#!HdB&ueM_wCg))UQM zpv$YPBDCPEL6f`hpFckW&CAmGYLY~JAP_%^HTKyPc=F`QRv2>@_w;DCq{-fVT}pX* zc}Hg_nlN0)h8f!B#-*aDW(_qpwWHHhEi~b3yie^ww=10?!?yjkPD^Dx7CmqH`88Wx zTN}~XC1z!D%6o4Y=D#E&`cYNIOC<_cLRS_ecGSnHY!9x~XB|WnGY<+JTkVb@e)Xzo zY)oA_OH6OrQ z+Gq^(2_$bmqD7x>PmZJcq6zc!t+Dz2Zmc_BM0Dv|DgNqYiyn;*T3uQ*Od=xs=vy`N zlp2;tmoB4Q9AH-Af`l~Ogo7akEY&NnLdBO`;dI_5aT+`__rx$WVC`?S#!+Vte) zLbH6&W)*I6|7)E1x`8$^xS^|SRU>$>hzoY39u^k%ipTtm-{m@~_|@i*tK~of%j#Kv zAp9*FdxiMFyM*ow3oY$my)iU8=H}leE|xL=Hpo%2U8o~XqHbDYB2lWo=)5S{vLF7jw(m1Y$pJV z`WO1TRgJ!Y-NYODvCmI%STlORe~4g^NB<>5%A{S(vM`rn{m1cqRhSWg!`+Ba*D#H78 zI~Pq#`~G;w?Xld5sd5vpLWp-6n$Sjn8$J3Yv5+~-^PRlBd?O-S^aK$jsr@#XLHy*G zw1SGt)b06FIhrJB6<7m2Cu;0<+);~0@oPIf#b{6qtw*zx{P0;d26M5ovB$nj1v1Dl zL5_#Lt{rD8q*{E=ryAXNCh}EjqNv671)<7Ztry>g8`sfzeMIy`G0LMYW~$x=F;Sw& zcYN93*Y}G)M(n$Y`}P|NiM#JLMw`CcdZbsEqA3j^o61_QfG0 zUCgTr*t93eSMQpop|78Qb+%WWno9OJv(SNZ>HN0wcc@cPQQ*jUrVq$KiSGqONTJYEKJ-|I7hYxIF0S$rhgx>FtRk0tLd zI-Hd~vbbKWUse+b`*!=w? zxZ9iuZDy4osKw)~;_B$WJ~?`3=3ca*nO5H>vr1iD`5ptO7Avw~vq&n@saQ+gSNwf& z@X6-yUfgFAEE2E|sceq!#lo)V@LvRhgGlp>ycSLXaSLtk+{cXBZBB$7!mWUcw8qZr)tNZNOCk}baWjK zqP{-XQTKP}u;JSH_;`hBSC-M@@t?NiL#IJOLC6xMlm9jJb^qUdZ&*MJh-3xA&s9W?dp4FZ`*F!C~pj(9YRBXG|Xs3(rQ<9D` z&-}>gvByRw4mNh=^0KLPJP&$Usa}eaytAS98Oac~&K$QdZvmX4om?@x+SzJkg9+|` zQ$`LwOu^xOar8Cz)0~d*dNuqIX>=otbjq_Bw$SyE!l#7AwTrb&6Vua+5))s7u1XNS zG4^O=h_BA~7v?F=oR5cvpnI~>lyRLaztE17K_1Pnq;B&#hA1+gcW7B6u4|zVf>88o zg5R|5fqcFU5^_4J!;348R+&a;Fdmop$oYat_RZ}rqx>*bNJ!S=Z9as84-kna2s-rM zLB;EAQpZF-p4w|IE@Iy#Uc~MHkoOi|Rc_JS=vI$<#Nc=okrI`S2neWvbSM%Vq`L({ zO1hCU(4z>*rldi-r8^8j>DnNTN_VHgH`fM#_kMSL_x=NyF^)RUfOoHVt+{4A&od|E zF;o^sw*j$IQd4_Zu{FzwYlFy+4R3rX==kKx6S%1gl9I36+S)o&m6>rjqmL(j|E^}M z^ag9*og=EQu8xlf7u5SGTHtX3$?@a)RzL3WP@l@sE>*#IKzaeu_$ocUXk!>B-`EYT z$xzjk(VQhtrfb)f#KgoBnzme7lY*tX3j~&CeL}O~ zR{90EB_f^dCE`WQngD9 z;ujf{;J*Tk%58@Xwd_0KD3u}au^(@_#A(r|7RhU$+HvC)HTQkiEr{>hr4E~OyE~Tb zPS%2s-QC?|ZnH9~NivZnezG1JO>3?rqoZNBYrniY!)g8V3&~V_dpomMw0Oz9nH@co zrnjG8GyPmIg>OfOrmBvP&e$}&!PkFixUGaCUbgn+n>F5N#A5G)$KjhQ;T*FaowB+_ z{y17WzkTqG(S_cP^@cShzQ-xmoHz2n?I;|(+Vy+@BYVw)z#Iw zl010|FnoCfgJI_`zUWf8e2tNOYw0UZQ$M*QooOzPttxDUtfQ0-OLq3`Rc2|GY2E>32Qg?XMm%YH}kxcP`8g9P#uA1`du6Eg5O)jO&st zoSZA^Xm%HTd7f!cKVV@2Hx3{F@!8Qd%fSjs35k|W?NTfb_T{0_82L<+Zdv(*T3>uT zcvo$K$E!-wf^HoNQsfB<3E!^2A$jt-S}jAx)r6tZs->)ydpCw<~7>f?4Q*fC69@}5)D23N3v@l;S-kL2XgY-?*``kos zvtU3-h^kjgT4vyqR&GvCN1ln|%0#=k+vc*oyL$y>CugatT|dtB7MPpK{8&NHo7tV) z-4+rR6*Z~yJdmT2Q8E&&i4Cf>XnN4+^vkENsVO)s%hIcrE9i$SEja)1EO|pEaTY$u zStW3v%4%v?OZ(lMgj*-#`~=$|Eiy9iEs#ET>=-4VL%K?)79%Y!Ew}^QFLlKOVXn3k~bfEfs6!8OwWF)u!CE2WKgB>Cz><(xo^3kbv-v=w<1YXO2hgZL}QwjhjcU zvNx8-%&K3L8Rd6DDh5e|k4C|x6mW1;kdVmh>BUxTuWAxfm8I}`kJl^&wx)AkW{bz5 z!6+k6+|RTwkg=!yabcA6D8=@IpGOBcth7P*EosQcx}fYzh4jvBYjp0pzz3@16RJ%Rk@=K=UN_LC!MXLp}~Y(TwYcR zzh&MLD{>SvGd29#)2Cy>GQ!<5RMNzJC=(zq8BcX)l&lRrW`5IGtWenR5RM#%8@T+* zj+B7Sm8m4iflN0RN1zX_C74B%wWvHgIy%Z@$9a2%&7&37TVO?Be^`xsvsJuJN=njk z`f(W725rAFv;C!Jvwg*q($dQJ?!Bp4|9Kqc^34Kk5s>l}NTu>YPOada+*0ajxia0Y z2xgzvQJ^d@1^J~xz6Km)GO|%T%7l%Ys5wpAhRb?q2Ff+FDmGI`o1?R!zWG*LD-JcF z%I(`vEXo$d`t91K$(k&?a|~U^V_(`qtW}-tlTn4Ry1TQz0_m4A{5?5PUJ4F6v)Y?H z4T@5-#0lF@`_bmX&}oNKl#ZUJ6ElV#?`#~#qf~IY8f8w|M^2naRhIM8=(itM#*4$> zOj}}}08*X@HAGNwFvOjEa0cy=dIsY0?+XXrH7O`4Hm7uVQ{nz-FXpL3d4T+&%kp?E zScloir-w~@@=`_{LgV24l*XsV#*!`wxJcmt{r6uct?)6|2)f7MdybvFz^|t3v7LXD zot*$FKZ|zBa{5&M^4#E{R_64I6Ki#du6qikz~8`avKuvZKsgix#$g6oL{Q1CdPP}* z1RmQ_NMv=Op!UcEvqQVUteS~D6BY*{g8(TO0h~vMPPs;|QL_qEIs-0KEbQ~eXB`Ke zlXj*mcch@K(|}S}J@&Jgk|@j3Q`9X3<&W*Bzu$l$XS_cD1M+(*uZy!!Zjg~-VSr!Y6Glje9dU_uPj1kih z{C!j38ob5aeOrQKU7rtcVd`~80d zqzLBt=j;F9ASQx{szTv@E!Qz;83Uq&$|$(a9g)J z{cZO=o(&h@`hA)=CgRqk?=ePE&SC%=z+EocUhP#z(cEIKQ`2$+9Ayi5YkP1{%y9R? zB!l$MmrNvvV{v9(nS{aJ9Y+MIp)>$ipYODw55arFmv8p1(ghNzH)R0Sa#?N_CqPv? zGB!qxHjqM)QBbI7jP1K8OjYRl&_jhcZAb43%vT*k00nfYGUrPJMhFVhX})mH+2|VDE`Idu%6{xZ%;x_k7;k60+i$A>;X8?9*K z%m}yD{r2r!h}NGwgi(EZ{b*NNSs6dzMPEP1{p{`T>QcoAhKHxY|0FR_T3T8{NJeqi z(u(!$@joY>_R4HDrY2YI8o8F`d9j2|rH8sfL4kov^jm)}WRVQ4Ijhe4Z(FOzCBT5d zXu$ZG-ZWYJ)-0^8g;Z90conpRlYp$YVft}}VAG27i0Ss*Lq!!>disTpgE2kx6o+C; z=HXw&KX|npck^W5Ju}mJ^e7!3g+c|?Jh|IoN%;69Cn>L9xgw^pv0|%{Z)&(|4f(I@ z`UeOI4Q?6gxufY1sCn%qAT=dh{bL|Sc3#znO!nu4N1T zLmXGh&`3CX!KvzzE`*-nzkj1jtNYO{$cjxMr`e<` zHbm?iE-kOa^t*>m5h-83+(mH$ANcld3~a!7LWoY=XHubbs1=}my9aRsAp=_T>BK#- zve*zcWa6P<3JeU6EEC#T&l{;f_AiNdy^@kb;?I9YMClDjf4zsl8A2Kheg@3Y8!G>M z;oZl(>eX!NYa5GxhEc5p z84w>;L#$<*)?x{tZ2)Tso#JnD+KsAc>K(OSICQWm5gEc4uv~EbZ6&kn>pG zK&bdpLAOjn^rKv7=dZP+m+HwL9!+{l-o%#DtW}^P>*hbBwVJ2Vz*e-OK$Vm`ENM=4 zw5a3+rbz!ePtoXff2k_|?74HJKP8b34Q&QT&dIsQiogY~V`CzfSUgSxe=FYh7dZ^J zb(KkR$E5zSs4t1z@z?c%L3BKV>o|4iS&EqTp8C%ur6D83<{Zw>oec}B zZ@(O#RQpYCq$6i$*rCb%kx@DusXl)b$-{`5C>8JDWyhF+8oh9ObSSJnS)NWhTCkr$ z91ZQM$;@=4VJLnm&x*dVDz@y-SjIgsQQv?#6&W8jYhQgvMwUTw`B(BkHm`1o5^fMw zt1s5h+B3GRMFQTC$)|Y9aKwb6)V=&CZBzY8}cM?ijKETM)%T}EXe0gmo zPB}tP%3V+0Yvj|<#p_pgspE7a==3ApQo{)%i`kkZ57?r0>brWGV8dN!$U+(g9Y{B# z3Z@?v)^+Jz_%OXSL!NKhE-A=B3p`TH<$a1b)03UwdSKDJE-+HnRIrKJ?kdBee5|a+ zlg}q~ZH`kD9OSn!x@KO&)y<{9v!nf#-3L?-Z)zBpR@uunY_(@b{xn~DTj`fCIn}^x zn(Tnlm51d!@UO^vw@Dd4iT~k)c>FWcxNH?6L zPiU28EUsmT#c9dtuC6#7;YboIj3{B#%^Xq9*F)h(%X^PQwrZ?vU{Q9c5b1VKsQc!4 zm2c45!=ZQLiS$DYlc3Ji!*h%tv{O8m2P#J5?nn5UZ8!(Z@{DQ^%#LZV&}qYSXiWHbXA^k9dnU z91ff`cFFclB%e|f%T{22ZO@&dR?F^fe>sgmg0bjJO5<<0bdqDsN)j<4PY;!!b-9^* z?9{T-UGwm#zXiys#}no+W|{Ibqlfm0@2#url}L&xZxT_TXKNgq@(xC@z3hzCD^UKEvqP%#Ocsi4j1C4VG zuN$_0h0>Gv57f@ae!U-l`I-6aWOGHO|CR^t;H=O*S~T~458s}#cPq`!&qe#v<{zx*tjzN*rH()J=VuTQYj zYAZ5)$$V$ErOZv_TM1A0j4u-%3=O|ZGTM$njpS#wuLC1Ac8Wd}O+W1wJJPGf5bxTP z%NskgCJ!4me*F_#K}_Oh;tlp>3f5IhJS2WR$n|C(k5jrFW36}IoYj*>?sxAM zXDn39|F*0ab4rteg~<4RNI9cl`q~H{fvJkzv)U>{$$D18z~{p~jzz+cNy&}Tp75(U zePnE%);U-G{4w*bJ{Z|K@cPu63VPP_UNY*cXf&7}(^R92=Hz3nPIqsdn!z!WK00-Q zrDHbGb$j*k6PrbvvHnDz=h`=Z44D2ik}-aL>swWgChSY5{s{Uh(}R1yf}0V%+n~D; zXI)LPYlZ(U2vwAKHzcT29~wUkfpW~bk>%F?F0=|Giie|AMcSUjpIwcPtde`cdxqEcmor}&Q+fQGemC$5@_RiM<;)9KPI1k((J(rTCi<^~iqiUSgymrl6Zo5q=3%9&{lOxe->3GIXkMtH_O3)xMZ{O8 z)^V*gKLcdN7urJZ4Ry z-(hi$r8ag$#(G{Wkb7B_eAJzxJesU7AjFw5mUhu&=Q-LLtL-0bm(a_oir$tFEtqB` zwYW7`*Et(_Fw*_7Y}(6?vWn;)u477DR}PpGzUsn*rbvjT6W5+ci_th6LfKQo)pf$s zf%j6PvsrW7N|T^EmxWut3xespZmMp?^L zXF3BRSjZ=k4Ybd z3+=e~Lvprz*S9EUQ1+}@W5GQZb%vR!?YP&HOfr$dEm&bLuH#BCNAu5;&-{ANgmx`v zbpK;+Tc^av>)PfyJPz(OZ&t7|Z8b4F$@ykc1-{)*DpxrF)$zCe^*?hoh*s#b=Wm5y zDtI@{Uoml%0c;pvx1`u4=KXK>65Y) zHnX^C@>2ESP}Zr&L-ta+8m1b}su#{dI{oS*5vQ-}Fr$#rj)Dr;w-QV?NGae#y_>NYF`w+e zq~w^FmH}>yHT@s--By?Ozk7Kq_8?1lV4`7oyZyDeFOU3A<)(?3_LRhFf3SG7YOUvm zzT2~IZ>voIqcf@2D7zsI&o=|Vm|G5Rw7<8rlV;`_0o&Q-MMlhHS�$_R0DN76M*+ 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 literal 0 HcmV?d00001 diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_profiler_30s_10000.png b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_profiler_30s_10000.png new file mode 100644 index 0000000000000000000000000000000000000000..f1e66636c709c59a0f04876ae6f3691f50386f4a GIT binary patch literal 191207 zcmc$_XH-*B*DXwM0Rk$$tMsl^As}D@=_tK})KEeX9fVM%S`eg)f*`$x-h*^O=@5D- zQUU>_w=beT?{n|{`HgY!`IC{1vvc-dd+oL6nrohDEse(%WQ=4uI5-q4$`5pKaELr` zaPS|K5Mh5o@8^eMKL|V&Ri2SxuK<$gQP}Sco(~N?pSs$5`dGT#;MlpiI@<_(Si9TU zxOmvRdT!&l$YF01a(HIospM{B>FMC=!v4&`*#`R~4$k-2KSJ3>rPzOje}{jsV80`B zM~q!m@}B6Od*XNM17d@5aM*EF9wbeSq9SmpH?VjgYR9@X`93>a8Yfh5OI9sclmXpU-ZbT^!wRA%C4nkjTEh zigJ?=@yPNp9ha62hU^WjdPtXS)JOf-rChTlJp`bl{-5hrHE;j_e50mb>%6h@Ujw2% zt;swd{MS`43X{J1U)M}ZJM({yf90ZP8UJ77l_fumJpQlYIZRJeZvEHrp}6BI|GU?s zE8I}Fv_dAGnV?*Puxt$qR+6Khel_b~KT$n{+hOBKZ|`4*1DyXg(7noDvVXGH4Y0Q& zXxX1)ne+Mcyi^9$v{!afQM&KmI~+78i`KPhTHWT?{K~Z}%Sb!w7Ne46ng{AofNqWG zTU2Rkg9>kI=Q|sqUZ!5>D&n$UD$Mbyi9Qr(;zStkb)lul3Bq|57pqGjjW2q6MS~t) zIFc@$bMc|F_ZBhxP0@!ke-ov5B@ zV1++g)-3Q$GW~MOd)C}d=K8sJGxxb#knbP``Cc7?s@~4jj1S~=bl8CIJUp+Y7gQlR z>>!joco9{4=6vh!#mTjVSWRxOT;ThQnl%uFUE@iEx$DE+QZ%8_aeDz#vFn#L`9@l0G#!EKy;6qt4#+$b{sR~KQ#@zV* zIO*Lf=gP5qoODqN?((Eyr#$jDX`guoB554zgLit=%Bp$GEo-11kn*l>S>8wV`QP&; z=h_a~UKo(%m)hD0UP=D;BHeFRjms=ZqRSV_icn!1B!$V{G>(~Ilzsr<4-S9tCYtV! zR6W~Z8s_QOxGmI749lD8K=c(d4#v35C%mzaYWT@I+j0t4V@g-IQe#Y((~eLLU-a3Y z?|Vx8DuZ6t!)C4Mr`ro=ClY7z{k+=Dr4;JypG`i7+biy!b=J|+7{X$JbGE%Pfu<4Hn(3*; zM1;s*@S$L4_X$U7iSQ>+L`(qxF=2`P`Mu1E*)wBPOflOYJbAD7_zPjt9ELPl_EzXi zpNq&fyUTE&>%z+ic4n)~#K9dMGeEa<-qpRlWd%&a0(a%uUgtL@47Yhl%ebp$AFaQ$ z*)QVH)nj1|ygtN(f%~@y&en);o1e*KLeUhN&1l(=mvy0Q$>%W?k$e+Z$5>jeo<3Si z1(>sQb74{T1vucm>n1@_h|Ae0z zgSXCUHP`nKI9fDiawP@p6!`l3c=j5?pNwNpSmsumZ?Y)`2MLAU6ICPTx_M{UcI*6j zZOK2RBRXI&E7)S}L*eoMoZRx_T)e~CE`wB@G3$xw-61qFZsjMYqv703i*F%m@6R_& z8Q1_KNl!Jpb3Bhmrwq5n>fS9{5tWRRjBYo~J zYi8~COP-<#Q~a*IIo-7GFl<>aF*IKk=Jt`kdHu?tH|sN_qB1rz0%z_DT@m7Pu+C!-@)u%!M1@NMN0BG;){SGw`Hi$p0KfBbqVdY3=0 zs>-wCL~|+T(8UI`f4I|;@Muv!=k762x;I&1Y5>A>NYnO&9=Kr}*j>%_Rr=z`uoQ1` zPjXkFhwtSZ5qvwd{+|ea)2ydmFu?>s`)2}Gqy(5~K>CmS`)gpze?u$SjYEhArk;qi%5A6N`m zl<&**PfFnbC@^V=pcA5hY!)fecXgntrHy=h&~IY6D`0VHx4xHJ%O|h)r1zi`f+IzP zfX%gHen5d7S4Znu6toG-LK4}2YQ7mk8fl6-xrh1sgF{-p?s)J}S|x|eKZoLB4r&Vu$i5`fmup4K+>D71a=)!CcKFCy+ zqR-x*)%n=UA*lDq9m6TzR~dlhS)M!qcO!B()xitcug$ro6yq=-3!*-{&5yPlU9u-n zZc3)hhl?%$$=SPg%h_{1+)wAH2f)Jpd0ROuEJ#W2L`3%+4Hpkh25!!n{`+qq8pn_h zF9NKpQi{K7%YrI;WG%dJ*sLC8JXk~0cR%nc540oDbR=>>n{2CSaDSt-8I7O$R?6L7 zlEInyZgy**c!dLWi^6q?e#`F?s21aV+^odjG{{l%?9aTb;+x~_(xr&hKneU^w$!b; z)kU$6UdC6R_G(ai?k7|2@vrA&GlAFT{auAm11Vl^+8$U7mw&!{-oD5M>Fto}oeg+B zejveC?$UGj%*Xd_5O>CdOZ<05;f9y(cl%2nD$@4{cl%%P;D1)*s%dh~RJs2CUT4?T zYL>0Sn~fP$;oT17q?`#&tq&R>Gm)++@2pCzp6eO9X9cBkd<%QdFF>s8*B;Q0j%U?4l2#jk6zGeYRZkD z?GkNCp9%>zwf2>|q-$)~+sFnYg^xAu$!actI=z+&dR+WcdMEO12O#V=x&O2dvg32y z-V>(m(Kk`<%jscetUQ~*wt8w!S>Xozv*wYl7QM=fAztB9cJclBi!~E7GX*_8zlK#$ zKOye>kG30yzWqUB?qa*YQroiZ1m~+-=6Yr{<$6oAW;A?x?)%N5q<1#W_j-Lw>=e20 zMt58f?lay#SRHSvi;N6*2elMNQ6-Cql;_R016pd|SNi$nWQQfU&G|+#`J88(2drs~ zy(9d2ca3q&|IEi^(#4Q6M5*_S&+Zt%^x3xX_A+tuY>%8P7e04zXz=+SZ3)BFqlDT4 z%&+Gw@^*U%6XqVsrW&{Nte0O7@`ehxskkzI3H5)Cx?CNCp(ZRSuAaPO8D^MgKOGq&^wRl-!{QwC!GtDyZ&Zf%`#(qW0L-C zu%^bVY*ydm9c;@lFAszm)|3aewCxrgLjNtcJ)(Eex66N`*_BqS4 z>$KWTD&3CljUm+3By@2IDciF6qvt{OAW;{9)b~Me3<^YBcU-qB`9yPF$YtD=g)j)d({{#y&}QKzyHH|cb{2l8Y8@*z7?30eDmgiimJ$7BRRh-*C371&L>m6Jq6zYBebrsPt@(;);bE@ zCP-!5-rU>XJZ=+_t)mJ$)9EU8xR-o&>J~mofUj(JlUU2pPB;NSJBpB8dpy4Gz7Ba# zC-Ss`pJTw)@_}JoMi#3p>W2P(Gd`)}UogPKqN&e9~haVGlf&-0T^0P}5U9)0m4&611+Mmpd;om$QRgjV7=JQPN-h<`;$hIk2OuJ^<{A8#d9rFVwLiP zSk=O8A-rhZQ*lAo0M;}~X80-<=Kd4rw`2F6yJt1yYWBl#9Rw6IZr!!$QUzO>3p(+_ zPc@<(Ok79cgEF}nlkY}+RsoNlGMaQ4w=+%#MR|#2Pqd$0fiaSQ^*H4`S{yRRO#jBN zt#|37%u=|2&T2u$g=|`EH0ZqL(87YYpP4fFymjDolHnlhTvC>Fdv@Z4Ii|W5e^2lM z#&=-}uhxR#Y~z-J9{KT_mJU9{4rK33b-a8t{xHDuxzO}3W5-F`HvB%XJj=!Ev#6aK zxjFU0c73k)wJ=NlT=;#aQKkV_vbg}pN55Y5erVbqUWmA!W^PXRf>+hMbm!#}d>o%|UFl zVH(_Y_hW&X=0v)1kq^WHWt1);I(MD<%mfR~To}(MKV-QbZCmp_KRa< zTqnUw>Bk2V{ErY!g%*zqr%#CbnQgn+GKu?q6vfDV9U$Kb03U-c-w{G~aDToh&`$^p z9*EfY7dT>g1xSt!pO#RR{cYb@@mhZgiXmL%zWEYBaj~Hd3wdvZa9mBbrMxf03T@lN zTNa+I0cEUQE5;#DuU8ekhc{RT%vE11T^7S>iKe|vbZ6d<=?92CI|vATsXG*~=K%Gf zQ4_Qe3UsC?dXBZAp>A(~aJ$VXLFF~Fu2AGan6nKg?@&PN$xDZT;5Bc6(^kv1ir4em zzL+x|e>qLTikBJ2wi6&4{Rt56W>JWp9L#wcbN-ZryAB0je?w``OpNSXC^@t^VVCk3 z>7T+$5O$I+t)M)yX_e%{7YbOTK3arI`I89nM&!}9x3ZSG=jlG3xq}!h|J45CQ{SVu zMKokXT4HuMtNmpL2FXA>b%s`gdg2CvUlK}#t_k+5M#KDVjcI;t4^$3rWlkRWpw6i0 z{}MT-If|}ViRu+4eY&${G|FIK)qj#Rd01TSO10o}*}56MsLjs#e6)^srm8$V@e_s!H;Ey2RI^Cli`mOPSdOf#) zho~Xlf9LWZdv;Hz@Ww%FWlYg7*WI?+!eSuao$G>X@1H)$?aQAnvrHhQzvW*8x_FCM z3%zmUdHZLb+EXPY>MNn5Hh7Y7% za=TaW?Ms6gAX_3}b;*hv(4J+J({}n?Bc*Qk$xhmUI%+TP;xPWHeD%1TUBYnfKvj6> zu`M~AkFTW$b;x(Mz}J6?zE_m?Bq}C!-ssB9GkK3PU0AKqgZ1I?kU_i{!Zh@F+oXtV zCCm1!?*~Urhl+Ea;8BU@1UP=o1Lw`-G>daHu<*f(W6C|u{B~aOy&|4!kcC82d#Y(h zLy)4pK^f^g=g8MjjIEytEae!%zB3gTB^gOs`41ByXgy=M!MI()?^?Uk(jspY4^dV8 zQVCm6)Wy*yURb8lG8#SU2^=oI=V&gNF7e%{l48vvNetO12$iwpN%vz8Xe6D^*FAqW zZupgE;=JF;bv0QJVO&^zlUJ@R*yhKiQc=?M&)I`RYiJ2P8<5{q_d5YG6P$bK{K@if zPV5Z$OS77+F15G68~9SADsk+#xVi_+o}_7Y6v&^U1Mt&YNX-mvIUX7@o5=q#iXjZp zGju;ij#Ypa%>kSRFNl4B=BYR>0W{6K;ortR<f7ajiM;}%0c1R@E~hE zPzY*;2_fqeQii_wR{estH)Xy1808hl=BK`&d?da%xb>^c~BP*=nW za(jn1-8)jmjMY4B@MA8Tawr}@&@<*70&2h|9J_4V_f+TG{n449ffe4)k|1kcom>9M zSx}}PUycwXE)5(qTuDo`d>f&!8NQh_F!Sm6(v_daZ`5ZTN%QO7qi# z{VP#eWbwKrJ&wC1?y`s2F)LNgv&#w6D5c_COY;zVnh|!H(}2mL)!P5D{UzNC5MGF6 zzICIV@BPHdn6);Yq9yq5iW_6$T}C5+*eAVLL*Ii6g$UxiW?jJvDHa_iZsic3c{s>q z>pg|T4rJNhe{i+j&2+qE$4`L%3&6Nf*gWtOmZ}xF0hgHafA}fxbXUyz+sfV)95(^& zbKMJl0oq58wNnF1WLX;qEo$9NgA!PLHcCk!qd}$CU`okn!oFxOro1ARVi;&6=mCHJ8k@C+8M;p(|aalEE#! zUF8te<=_u1kXsNymd}w9@$xdbWN>WGz5nyL1g0t_&w*!QFQha{H2tLP)3R|W*I>s+ z`Ei&fPpN|&=)f%CjaQWk7_l!1H*rPySp|HrIO*c$`xJ8Lw6R5ud^OnN$&NG%XM)1-hoKmdm;bv6Ip-VyY@XINm#Y&6~ z#Vy8?<+<&)vv1!@<(s*uMHq&VliQ!~vL55ux;h0pSpaK;t}T6*kY~LfZiZh(kt*D< z=Yi%4n+vcw{VL|QY=Er!EOTTJn%=YAv);iy>byapG`!aNvSOVh4rsi8cX{o?w zjRP5)SJv@UMOUR67DPWnJWw6KCTKi&MiGqHJbk?l)m1FWQRNk%vAty;hc{2rp-|h2 zm(Hr>c1BveyaDMOd%+}qCV3UqbWCV9PNPr@_UkwRIRsTC*Y?YPTz*JEl&;kNs{!+whRXC(;D_ea+}+>JjwOiO zNq?)%8m01Zru5Ar3FkJR-w(UF%TP$#-cY!JiX)cOuiwi3idnNIsUbhOXE7rL^>9)z)#VQ2}8i+-#>P?wIU$Fqm;=7ko|f%&BD#c#T;qj-nxg%QqaethgLl@3 z55f!B9&3sDr6|S0W*Z;AO52uBA>u)Bw#hu9i(AuzYXo!i4}{!WQ0Q- zJ@fO+tu_0JyFyDd2$JK%KuHi};XDr0K?q>llT1yTGGG=z*enT-8D4cZJ!Zh{e-W|y z0E!v?3fTacJ?CG_X+6|%4RZFSm_8GW{YfF2;WuA*72GMsb^rFfJQdv23CU&nEX=6G zZ(?R0^C{XEofF?UDztt5v{1a=I-}oKTq@>TOdD-vzq5D^Ac#e!yTMqX3*AFPI<=q{ zlupybCyeddJcZ@bxY#85*7*BEJ*^)UM7yQNh?6i7hPEkAfS1w+9j3xmg#+-->Pd-g z+Xl#v_GCo(fERmS5LsF+-I1xYz8DT698D8oc0M83YJ5nZOGxBO`)ffeH%lAQ&EglQ zrJ>R13xz<1C(HrA@VnJvElpr>kfmt95x~b3&&R}s&B?jkt9Zu7Ll$FGYsD;EN#(8Y zy}5VNR;gt~Ashs-jSca)LsU4I)m$s_C(-x`^avt33?khfVk|`(6VCZDpV+lae)e_} zx&p;Y>i=pwx}{u0`pTw$zI)By*Baqu1sehZ4DY~6T=ys$3^w4 zNj8`n2fh7rM{WTm<+x^Os>qG!3OWKslap|9Tdwvx1jl^XoA@x((zC@sxA#3zMlkk!gV7f9zLxk+ow9S6k$h%*lJS^Np3FXi43f?zr939w5 z!doQ|Yi6Kbxv|n3yO2l)9+l^;PaIC#ef;zl&zGLJ*!1_57o;)3J%mAnEc77r)k77IF$@Q!5Tz=af}rGxM% zY!TKD2 zqgh&?!>5NCzmtCVLeAfAZ4Tg?b+!*L5bB?pL_Xg@r1wS6M!AnRhgG}MCNBH#;* zbzF7=8mJ>+A~uEhGIF(*PBSEE?K?k1kmu((8n5ho_Swo{JUM_xFSv+eGSxIra2$tk zqv+0O^Uu1C9fa)JaTfV@6)@fnA7g*(xjtL3hfNwlnHnczN)$t#& z13vY-YC|(K{EMXZKWhbQFK&xx;n6sNaeC2~2k~9(f5mi$38FpFLE~zjH)XC@|dcy9W z2=ai5?BT)-?PC3%-`f_&tnr^!+CO7E+A$pC6P$+^B!uI{Zdog|zC{Uq;3+LHc#}0y zhQl=g%%g}f$U=|1qoc=4zO9Cps>2My#b1-h@dNJ^jT(U$@kIj5bSp;)ET7>1Qm)zo zD|(+TDd;T^$zSJMQF1idu>N|q(EfvV{RSGof2dLOeP!2;mMlpRfiX!*bOjG;ykN`x zA=Md;?=&0nkA`;KQB$>4Df;9U^AzT z315#FUYF~+4KV;-&X?3U$)^*E%GElVtahza9z1K8WCJ(rQyIuq^>t2q{Arj>eYx{T zK~WDH_i|Ixr7Cg0h(LXfR>x(YwkKKV+dPx#bYlkAYGY2Y07r_I&83!6akN(G86n3F z2RC(olyp3dKs4(|Lf0s)IMA@q)wTSh8u2n8Km$*_VeQ<>7~bxkCAiHyFgL-9w!h|8 z9A~O3D%ZgM_!NmP1AJC@l+IhQAY~?C(4}KY@+d-kyy6y>C2kMN4K0! zCd0c_74=wM9#S{w2v}LkYE_2ScTkUP8IZo3w=`$WEvlQR@Uyso|L$I-^OualLZ_lI;?=g`WahObPhd?WnQN)^ zP~nx5Wv%)D06)5aDD@n`I~wD{Dz`w($Apblw60qbs{(E z#zyDne$I;2=Eb%6vo+R?8Rc_!wyF?TcOHa)DhrTt5{x7bbWZmf|LyQkDpubxg9ob~ z-y}!dtQO5s>`AsIS$QEA?5zLc%C@uqT2*vBSJ*4MJUihc37A1j36);)Y!-xc(M@E1 z(q^*W*DyYnmkUpRr{wpdcqezc49tdwh~{!3G%|vo(ZC50drc`aK+QyDenA+dqtm<+ zQ1QkB%zNe^UuF%IBpnK z5hO{DCI!7&D9YAb*!@Zxr^{)f&~v7a`IRT~Su)*2_U&jpDyvnWyN&bHLM(@tk#iEa zDfM>b^;5)T7s4UT(m`}{di_ysjUw>lZ|?hbt>z%8i3 zMMu8j@JpA1O)<_71tAn;$1;A?u6Wo}DNysCPfQ{RQMbah20gXNFUq+*% zf3%`1oX()~&?fIJI($AU@a$i4Z zJ3>p-I-PCW0B*MqfWT#F!M!Q6TKl(fe%1I;;!>C9(zrq738U=3f(jz#be%C6NE`C@ z83O0SN1^~$V|{Eog6t?u1xq;zg_g=v!a$ZM_W>Ww%!o)uzsq0u;}SO;7t43Up;L~o z)Z$yOPS5pn3#zrhT{Mk*Y3k%Zce|^-jQMEtJuQ3PKI*h_EZ#*+0?RtBf8Kjsb^d2d zQC35yIH!smO{4(3TjLXG4;Jz^n*Cg02Y_-$Z$8neX&UGU; zu*VnlTxH%hEG{yz3Z$jq?+e+zXVCaf@vTAd>EKFufN>WJP~?R?0bzpz^EiSpRL;Oo zSJK+gc%vry-DGLQVOyRt`Y_(wqaR5CsBUElL$VqFp81k}-aq6PLuAtyWkQeadXeA| zR)n7DHUThWnIB=(7XRz4#yG1KVMPzXs$;jP?<@))9rs4-EmY>-xCn}dvo!259JP7G z`EOQnaZ-M!YcF|nG^rW_KzJ}3f5`1b%E|}z9Mso23Owhok<;VBD=iLp1>s-rrR)Aw zW3brXe-iOR4Uk6kT+Hn0#C5CnQ&7iAkrlV7MUq%>3h9P7Vm|>G zqi!K6bg55{^uy_9XE&k$NkPP{9Vku?eqhZ<5_26|QBl_XNd?nI5=Wn+aAl^n9_HL$ z@O&@vJX^A{!H{kVxOi$S%^JPbEL-khCB|PE$|grl7hiRM_5SJZ?@X_MfqPe3YM(NI z0ruFB_vTQX!{A>6N1*Bmg6|~g95lTRgLE7?IZ&-eQa5qPhYdc^CKZ?^8&%)s%IY$z zpjex%E3Zy!n~tM$dL8Twf&}ne*OkCc{pYQb_^bVGra*UZeIo$eqV{;lEin7THk>vpI~w(i#w!djy(OS$Trf{{Emw5seqRhRaYBb7I~YyY$#OL zjNL@Nbq-&1)NI=R?Svc^k3*1QDB}D-VZbf;hvr4mY5n}4aBjz)}E^ym`z{!2K#ko zDmmvL?@Uq2iV$zT_c|K8B5-znbN_O9uat7`VLO1PEkXLk)t9`*5y;sPPWgzcaQuWx zkxZ0lpearp$+Ho~pEwV-PS@F`Cjt^U%H;KlvV}&bbpJ$u*1rkPy}yuDQHACKZVR1` z6~~zC=lS3}YFc|ySLy-W(`P_ylBOyp?6{j z!kUsWn>UXj88FWCyYpRk67hyK;gb68#2fRA+9INCje_mz76h}#fP`-~q7lEU3TVsN zSC?%t?K=6C3VJt9K&%yS7T793jcQ1*?HL5(gmyuH2Mdkh~ z36a~GWMLJS2-aGZAV80qctDy}h|vc3`(DgKk0$$=UA9`QD=P9MCV0E;B@0!Yq6=ey z^BwXvn{D9yZB|M$vwkF!C4 zF#l4D&-P;o;yLse(`P^I)e|(cWj2b`Z49bT_4(&KKeVg6!}02_)0)58VSO&n_rrg!xIEC0SVOI`Q61>KQcD zyyiPPPlF8iKn`hWUC>{uz_P8rh=pw7_LhO?qBbpZgf^#zEDG6##1C zu+;dp;$zcyNtQ0@XPl^*G~-r?STcW zsj7%3zHzdAXquDZTV9Y9QPzcWnAY!VJ6KSOEq6?BYnpG@{&u)5ooLX4z8r=ymCGrU zPe9M_%yZirCjCGbE)l{y301ethe|_158n--MCl=siuLkn6i?Em>*g=R<9A?UPE*v2KAy z%V~et;XL-+=Ger5rA@Ue9rIw<2to7w-0iJSDRSMj4SUYrPa@_riG$d%Jr~Qb#ihnL zPg5vb?sawU`B|u$N7Z6}$`+PMyQZ8^J#%>pB-`knU|>Q;lZL%)Yr7vk;dBL z|I!r1w6GD|jS|bETRaNzmvsF(;j?9!SK^~d$IH7KLOq9YoFup|} zI~{&F_Ioi6x|ya)(nl;A$VgtpcEGIrD(SPZJ>zk_oRQjUSMh7`b61^3rd7wvPq*P#6%G)${upqEt!%2_=J@IkEOML(Edi2z35L?Ho zbLuBL%BGISYt!ZZeEA4>|{!)qb$P<6uxeFR` zit&yk^ysr#HmmjE?ZUY*t{decpE$F|4}R`Qk_s>4f1A^E_m3E@I>~8y4o;l_+gZf$Y?& zc;HeD3?djW8G^#S*``#lfyJY*2HY3@=hfN5xfB0a+vJ?aj4YI#ND4SK+i6IB7WS8P z{Tk=#G{_um#QLh@W`K&}Q2^`oI!mNO+wZ)>f?^X13xB#5LjGHO<-EuIPi4ouSt-sZD1twovC;V;VORof0FzBIWhYIa~xxFHkC+_p&V1!?(uA-Qms_g!}!^1pm z>l$)6rZ@rf8E+@NHQ!E+8FPdN;BHP6Tkp=l^O&!Dh|#8oGEbP2J|$}9{KO8*-Y*Zc zga&F z3_&6kj}9G9GlPyROe<}Hzm!8<)j|o==6hgTG~w?N3;f)Q>Li(_&y!TdIi$Yel*qJ= z;bYd_k4^=YV_}&piL^ju@BDaa+hrzY(^C%m&`W`eRkz`u$lW)8iUy+p;1!ATEEs*@ z&^-8QtJ{2&IHrRef+nRcE1D!V1HK(;eay5FTFAjkd2xhIznysO=KO&`ITN63Q8*S| zG(DZ4ddwkBX~ND+RFZ+ywQ5AaJ2?4W9)Ex*JejCn1%LjdHZ8Ltl2TFwc18|$U@$qQ z?>}elI5BR?1L>AQnPdY6pWim(*_+}!nic!`p4>e68dj&Xg!^5R;=(W5)MsPEdn?J> z(uZdH%)DVdhyDn?K^3j2QIH|y^QpM>9!aG{Yn>9XEANjy@1H=6Zktm0$BA;$Ju z5bhkz688{8g=A>|IX}z1kqZDc8OVEBX{0uyR!B zUL?Xp6^pDabrs1wh&SbYbf@lNi}R-mVWj6D%DB^|3Gn2MPv0xe7mL$wVP$UPITw*f zVSjeyQZwm~F8!u@_$R8D_pM@KeCpDa9g<%nqIah17W58sNFNt_87ksft+)8va88!K z;t8lHWKAW`9i@8N{?ZEIeZa(xw_OUOOE&yUao>>Q?Ra%C+xvYF!dqpflyYVieLe>C z*W+75)Bt|0?_G5z+DM#AL$X26fy<+b8TQst=7xmY6aOqDoXbO2C*jH`nb-GVdCbz2xdMG zoIo88XAu*5QXP~)2kApWWxpWaX>TF&Ez-+OaMB|jSQF#nkXy(iSp(&!p&E#iHN#bK z%mq|ascCXG*?UU=u)^M><;iAo;9w=KBkHvM1cX%xcB@sTAj1r zo6E8tWak(=m{fTQr!(Nxl)|HnFKhC=n(-3mhkV`NcbAeGiId|Tf}F6JNPHQm#|^So z79Y2 zx7Dg{GOBcsB-F4Y-#V(ldQ1-ZAC1kN)6(c#-22f5RgTMm$tBhM>LImR5^mmXb-E+w z)uSx63dK}w3wrWQg8*hmWae2`Xw=`Cx|@u90RvL6FbTE+Qm;+26$a6b@o9YU=@mA4 zLEGX&P;IynnetZ~) zds39Vt}P5l+;gGaO_)~hm~PPx5!%_9KNDP_jlHizGeU3}EX*7VN;)ue?hcx(c#;3* zHD7+d!>mwAWx={rI)t0-^B)TZ{tMyxPqp#E-qoxY0jv)`mgN#iBr_jPe*|H=YAm)o z&*%7sB8|-}568A68stNYZJZOl#*vuKj|cc!_`Y`VV!QF?k_3*c9Qy6A4*b=pfdUrH zs*k1d@j?bS<4mw->L9kf9tR=`dG<(D4Xf&gQd%IpScAuUAw8vmeXe} z`$DQhul*&rIy-+|Gh+XBgFXC)@|~XNcX;>GdY&t%`K~5kXxL}NzH_`y{Lax?8^T}h zw%w#$Q6KNQ9&`!K(XM%DavO18CuBM{X;TcZSxIGZ+wgsdwNE$(UibO<+vWCng!g5*Rf;UV?97>i@oh?e@3uB0 zu=%?Tvb%j2V8X_hF22x+WkikwEsr`Y0e;2iY@U8=PN<0O{lg8)$Ck5P6K14q3MqHV z9|6n8>|(0hO878R-m;Puvq(x(x-Db-t_mgZnF}M5W6LcPdUGplZc~FMI*H^kEICaX zvEr59B1$F$R5H7F)Pxx_Dm>fqvrr^Wmu@eSna0r+j9f1R^*yvkn~FcOSZ4J^kjrth}GiRldCYImcE2 z>AB80PK!1@sAUqNcpUZ7vhe}ydg^?MkA)^Y!? zB&Z+VFd*6csdKaigKXIYxJ+t_Pi)tzYTYYfLWcq&Fk@ta(Y-yWQ$P5#QOa(DCgSJK zqcbOE;C-bVkZh^G7x5mC5$(=nolXWpht}`L5m|bznk86edOrLd{BEmaJ>~fjp9RtL z$;u;H$dpAC_d>mc#3R!;#r%Typ@Z^r6l|Me9Cfsd{fuOi17&4vz5W)uJUAHb!4`%RRlP?t?Ag(T2Ye1M7~xNt}BTJAxzDRdhZ%`V?FA zpbW%gHjG*;EdZOv5&Gk8+?~cG!x`t|T0d~){Rz+HqPUCDliy_ z1@{Um5lY)e;#xNy1|ekwcxltm=wIXW;+`_55*zdRQF;im0KtcC&I#C8g!&@@ofCE1 z4{3V|&d1ufAowE^#>NejlC5b>=z5lnv`!L^|h*c#x-yhZ|p8sD0>s19z z$Vo>samY7q9FJkRQp@yg9NIFw+?l~1L}R^zAp6jW4J%F&!SPrI99O3*35SNld4IZn zSzFug=B=|>G-9}S8;*WA@QE?c_&mG-KXd`}>&g*VXe~8xCN))tw0s;zm6$&;94Mo>qPA zLPw1v!2mI_nwjAnVJQcHDhBD2e-J<2y+RR7H`;(kBn)}n+YD;=oF@!P(!K-qes9FDp<4-aj5$*Ay5+LMk|IOx@$N1rWWqJ%_rc{|foH zFj7w1?h$chrWg~jy#!I_SQ@x3l}P;}WKQvI(G4jBu&&Un6g2L$*EUHY|H9&P!$L$H zW}RpvfF#qL@N{E-S{o!k_tCkmZhET0=JSM{(k$y3rNs7kS*ZVAr_wTb(X_MwLApfu z!HBONV6!mvtBio!KOg%SJ9-(+a6BRqn&yOA_=9tlb8>83e#9=p?R;J?@&KZhiG4}6 zFxShT=F5IhDe!|slpk~9Ch0LU-c+9Abt{XoAz|;PrAWyHpMfo~67nLrakSHt7=Cn_?xfnCw(*?Wg-Hh1vu0^KI!`t_dJ0}WC7Af{ zK^StC#vf?CyO%c)g@heL+n3q=Vv&tn_lVBkqdSWulySq;?wO_0lU!s6U-~tDquN@j z5%3{60?_fSH5Z+EZ4nDd@eo0*< z^ZnF+Q6-;J$>Xe}_>Z_i?&Kd&Z~_{KDKj(P)It)_>?bn32%%%VMHL?k$T?yMk;G{$ z-$pm*0CPt(WU~H<9;A-bG`1B(uDg04#Dq}S*yJ8atPbp*soQBcZdBigRa17PVhf^ z5As-H3sr1=z2jn#e>RFmmq4XT+Mdq?x4P_t6cB~JUObCQ;-sT!Bn zjA$@uC&lbaULW=A)?YxEGl!-60!U4~7~eietbRuBV12%wx^{y|8E62DE6sh)DNoVt zBNvVb8D?8>OU#$X2_EJVmOp+xKz^X1D#-|lB2N{)@ph+J58ZKGRlCHy4lN%ojy z6zJ+yp_L~@u0G z;U14#KRSaFyw;!wjacl^mdTj!@Ir;N>>vcL-vEt`^A~$XUnGx{92*wPuEt7WY^G?ciI0(*H;BZ z)xBTSHKa&)iIgDSX@DqTfOJSZ3?b4T11b`Vf;1=sN_W?wAV|j$L(E7C!@wXl^mhb# zfB&10E3d|L&ffcpwbrxtptEN^^k)5(_?ZN0f$!!;guR3HUn^{x3}m)spOv!O(0r>)6aLZ+6`FBi}%UqA5^ibocps=OvM=Cp0VT+3)~_NyH6QSVRQb2e#TgFT z7z8sZxR}>D@cLRoB$E*$HR#~pSxNPOA5WVGR)_Dtq4}Yfr6oW$(2sh$k*wv2sICMm zAvaKEAg}_{w+wrA3w+Oey?`%1Wc?~`NCch=IiOXNbXh=if8Wd`dsM?NFrc_f4eluT%CP| z&uL5nbyd1c><8Ha_nXkU7AigvWFs{f#KV=lYjAI*$16wJ#ZW9o$f$V4#GcR&8rKw} zr%WD8mo|>ZHz(U~--vJm!chWIIHy@+ZM1NzF)UN8c}8Y4GM2-$xKGoxOswvyQ&c1v zyy1Koc$}4xqYiOCOp_JzC)>!lF5R2pyZ26U$9PRbGu@>iGKrq2(bFVpWu7?o{mH*g80*`0x;e`ym)Etet^iEGH&hj9dlz4 z7$5liH(ctXNECt~LQ}(F5D6doz~#Whzzxj_BXX@RB-cO~p$zs937Nl*J{4tunD{{0 z@N~(1Cp{K^#kc|#j3vkVTF(U6om${f0tp=99MPB~Kfd^u{$w}|hDp$dtv|)Jj>9S} zu-HpLsFI3mH_UI3;cD~yWW8(P&hBeV*wjK796aU`;&t{gf9O8{>-i7f(-HseKP`x? zQf+y34f&3KGt~J~9{qkG|A=Pax$HB0rWrBK9ML>!n^Ylkof!M+C-=lkEk`LS$zt35 zPn$!VG)I*84_!cV_x9RRFrB#!dCenZZBKr$zA_iVz*AoNW=bOrG~^I8edx?~=+6A? zVf%8qXCjHFKW(N7Reo}2LG77NkeBP`g{tcK)i|MQDX}PzS}qP~PZI9J#PYR*6<>?j zgtWJ0DX~8rw(g{LifiBPDVbM{BUabivfg)fdfoQNLZb5WgFtL@wfD^aC(P9Bhx-(X zcewe8GyS+)bMHQGr4ZZwvg`}HFzZ@j)A|nv#T6k& zS^P)QHtG)J;5^Exj@YtNl1wwge42=lt|k9e=P&=^_bWa}oG-4ld11B^*b7}IE$jp4 zq@}f_U6;MtYqI$nqgBSdmDP$5Jt9<@O`K4DBO6*KB^C%;C~6-&N`cF&wHfmEbtCPa zBk9|mE%wvA-qc9{w4sVD1S!VHzK>= zOXSh!QHOnrK!pKeZ_^(r+`Ws(34wN#B17!Gw}pq%fGtgb`Kwf71oF>jLJEP2ko%k? zCQyrr)1T&-4sIc`Bw%BEVO0p5_!!wPAZzJO*6;KMrr>z_Xu+^>Fhyx?V)idH^WsI| z(FM^F>^Q7m012NNqkXC6Pun7m5O(+qOJJxte%>~f7b_BFVd%a~_Ccz57qOya$!e}h zeQUuCR0W4aQiOKh21%J-N97{mn#D@_RFT8!HD!)=_<=y7UW3@h=zwa9Jp!+r%MlL~ zc%Or+3mq4uz{h(2wAWbXHjQ;;&ByP>NS2abV;MgzKem()DhTot{2gIpf1AtE++*B! zJ_b`*If^$eUAYH7_l|MCpm75inp*HP%^-#<#o?-T7|O!VmEtIeI!}BT<LybdZjO#L``Ibymhu8WPYX7Apil{b5l3gV4v zzE{#+&3p7W=sDs^n`#8(y0&tX{)!cbq4W3Jb-LR(gI}Bq-n^me{SRW)&hkY2B>G}l z3(RMMfDimBeBlj~T>Z+bBmF2r79(P36)YF`sg)U+hu&^wI15L)b6?z|Qp*fG14rww zN#D+CYT4WS_RC;$uv)XAvf)Yr6@q=I&tS~g15T#XNTbI z8Ez;l*~;JeMXMNAJfEoJ&VIOBBt)^-LdZvff=lU5v+Cta-GVK&cd5pqYcMJcD@zt$ zE&Vx%K4%lGydi2A4a){QwU#Xr$x>UxvC*4fJI3g;_Iiot%aRWoT77)p&(Ocr2m*Ku z+&B3jl@zUUUW@b@lbNaH-p{%%tnPW9rKIOmPvz=8Zmms#rhk zRqGEDWJi`{x2=ba3bQ@fKS+`}P(=W6(X6+;G3iYfSv`LmwCjLZ&PPt5q9`5-R|VCY zVoJkWA(0IZ%$aVU_W9oIpT4%6R@z5dV^rlK5|{0#>K&61%XCopY!ZMrTa|dX*s+#W zZn=+lqt+WtPBGMfNluq*+#*K4u<*$RYD}O8!5=rRq6hWpdH#(rU z+;SGE_`fIW$527vIY_*%^wYb|j4fNiVeS+sAU}=wG8am@C5PCXnY6_BX{8eJiI@Z0 zf7r~1`fzpV(qp%_-8hNOP%z9BS6zq~*x)NmM| zu63VfA=dAy!qG}l+T46wjz8%3Nfk^p^Ts7hGg2DSwV5rsE*CLS%|x?^k4YKP;2`Dc ziQ|Nkjc0515S%^MhuwBX5BHN56k%!MxIrk2+}}qtGLJ=}W{DXM1S|q-w`8Y|2AbUl z*z~6wSHB1^4+&tAyoEjFIP2LfW&sw7P|JWq9`*=1c*mg__=P}`fVrR6#%%Q2`*&sh zYj$(ze%=W~=b05?2YEqqK$s7Iy8p z#_4HEwm(wbB6g^68*bs(35%XB=1s~jxy@D$)Mhv{sI~h2geCnF_4O7w>QHb$F>Wgt z&Jv5Z9^t`_+R20YizbL`RVl3$(7y)|v|+6!VM--s!ntat;gI*<>zF>qg`;J|ghYxE z6NpA%3ST1^*ns*>-{E;1ks7@K!x9+RjKC@aTqE&Ku&_f$f<8{yy`;rCGv{12D1ttBP1+n3_HwP7x)n>Vb&wIu)jMJYKzw0sjYsVCOrrb<_|8d z&IjR&{0oFg_+Axdq|d8cva-7>A4r`s3EBe}aSdp#@tj{9$CU9I#*E%B0=S&tBZDr6 zqH(qun5kKmJyA{z`K6Me5^A#_Z#b*C^O~n0A-YIJ*}ujcgKCbR7iz!kRJ7!BF|m4B zWxsaig#aYo!ti$RY}IA6+wxD_4Lo~I6T_faQOPgNW2i=KawW?pZcEb+7mkSji<+i$vU=~xIyYX%1--@6ZPgdb3=Obm$3{-KN= zs#*RUF6rKU`a3N8_iuQkc+#=B6M*~u(rnx_4S#Rj%>*NK9js)Ij;Q24i7wZe&#C4r zc=9(@emBiF9PQXRAz6+Mn|@x{0`$VGw-9nmQ7qU);+m+>N-nMGBP3=qbnq_jcnScU2Cy@<^fx9qvPoW1J(e?uL|21Y-G4VuJS%X>L&a(-aqVJ`yf zT)$TDt#-d_FFTZ&#^J3MMJlO*dG!3-cI%vF9OVP&m2tob@7N6d+M3xiVuC3)V&@Pw zd>RHdLw@bXey+#HcA;9Wpg*rn$;1(=wZOt(7jA^<&jFr)3FeK#jsk&8s^I9|pJ2%B zBQ?t2b-!a4A?%K)^}Zf%b)Gh^WAp);FC=rhl_bOzKlz9z5G`bu5BMrv5ic$tGqcfU zQ!E|Nlo6-u=dvvxXYcAf*kmYkXEXO;3fvMxEO&Wf%)#JBKB4}KJ6FoC1LA0hq;{VZ zqU1SpH@6D+)sLG-v0LAxi&bXo@OPEZ*816VV9egtN?h|Sy{XPlAI$JuHj)S@`zZL# zDV05uoA$Kb==2YuZ)%`cRb%U9ZBf({F**QgMkand~Ajqk)a82P?cU+e~7lqcJ13R4=;nIkkh=z4fspiX3 z4BLIF=Z~Rxah&Erb|{uTdonBd;^;QP)i1;Yxj^YLoD&$*B_WvUfYNlmOhFnZI8Ri1 z$b6GV!=CozW?UB^ecQuPIq<4p5vyW{x5MIIJkR~7*;@%Hzx4!hqWQ;Q z{9K8tdX2p+K4kh{f#U5OiX(caXPL%EeAxRrJ_P3@?8V*+M4U{rA|R)2sUp%}oI8M>iLnuX&y+BU2Uz;D`af3q>^ z#~ggjD2kZek{Kw9JY>u?J!CwaI!mXx7{)p7|IN#sP8HTVFPD_Z%WL*bIS2RFjtbE?R%VAY`xTa<^pJC|16_EC7no<;Nd6LI`calfMt|*48 zC;Ujdu{38Aet8>FAN8VGX`!}S?gm7()OO%9R>O9*U%*_OpPTP9n49rs$C8%BRYc~T zmyKPHisMK78P#}|2=vs1Q1A~jm@`nz4_7X>I|DQTKXtNRktD6BFG9Vs_v8ss>tYV51~4Bk42{aDbD-9x0I zHtpRDI4Pu%QX{CN>l_;)5JKe^_Vr`RBXkxDb{+ern~~`Fx4;K^TGtO0BD-xtF(`M! z%en144^h)Y?gIp%r%jw>w^4%09mwf8Pti%64IeA9K#Y!4oSDSdX9d|#HDzKxilT-u zij9aDWC=nc7GY$TF)N5n`)7jMbX;A_(#fr@8rC! z4)_lPRWhdW3F?Hs4`6HqqiwWH42Rjf+1SLIaD8J5?8XO(r%#X{Wy*}3#wBot`;xqbOnMX zH|Xu8w#c{ZT{@c`y^;V#c`XA^sZi8h0g??Bp9`XH3E(l8CYhbK^Q7vl4cIg42+Bg& zb4;1=0rXy(lhX8|iTop=cym>nyIjfWqt-ILySYC+4|K8|UA{hz)d>N=ul%5%JW(%x z|6t4pmkhG$#j88k!Tlt~LKT_=Le5WSv!(Qva}(+nGx}FKqD+zxt?j}vKOc2P4^QAGOGG2C;WoS93r7I2D8@VvR!eikNK%VHSIei z++yDevdP7G0Gz&9W^(Y z)>%Mph9s57 zg?&D(_d$Ts`I(gcZ|!0Pr&{zIYQ*ol)n%yGMzOh~U+UT1w*3Z65@-}{)8WU=*)4~~ zNu;zc){4fDxLR>B1;)iP=}(C1^%R`l zPn9r0k6+4Y|UEM$n3W#IG78VskRtq+JY&r@f13#QHdf@MMRu~M{%+L zm3nZlNW*~QjPb8QMmulP{I?JDC@Z|59D;L7CZ|ebuT=;q1I4PF(pqVl6T2)&1*0vP z#`tFUy-I7};6~)~)$m|&`R>v!P@4DS_D(Ht*I{+6uZ{-eYm#9)XP*wX7Sp4}y|3p6)dQYyeOeLu1vHHypoeyW8 zh6}cL0?xe`v|Hu)nbxg{0>0YZ;4xQYco1J2sWLMJUiCVCD`t{z~?(T}_ODA>TOlLmhip3BG zykNm|e5osIzM=V8N$PCX-_Y}!)TVVZmGbyGDOh9rFI~$eMWOaw20n0EQI`|t60Oyh zMynFOsjI%FOEn=Ad!J2wMe_#@ix6BQsUF%IaWTv73*=F*H8}Z60K2rU$ zv1EP~PmEX@N3gpelJ(v3aQOMsmML3Jza&EC=NotmYiN~sz%RR~ss3uKPhHNSr0nA1 z0hpu^_{s=i)W1d^Y#`{wl9>9rf;T z3ObT1(db&|s>J|m`!BauN4;=^l21UeL zjSwjb$3rsC0`i}s|3~>I%XjjvA(e!j74i)IihV z)#pCzggdd2Cm3SmTCQ76n!^yK+G6(L&4vs%Gs@HF zJg--z*BcS2?_=0R5tN!$xPB&y=k2L_t7hu&Chj}Z1ylgrU-LC{h!82_2y>1=oe&#X zx{c|K#bRU7+1v6^t@G65vn_W~9zK#Yz4}I5(~z&Jj8#>I{sb)yZrxp@cp(s{+8-{4 zEtErAT?=ajq|rX@8*}9e%R_sj{0Hryv7^a=07@y7A$-G*mnCb-=wJ$>2Xom z?@LsVhR0|%PtY${d%1TLeYj83L4n-L?`XPLmQP`X3Ddt9wPJ7Zj(9n?ns%{DL!yNl zknJ2@2d2hu#Hl8uVO+D&jbMVP1=!>#h-K)0niz9K;M?lBG%5B9t+Kr62nba%nVfkP?CNJXCA=h7f-I1Cwi>bzNq8Z>&hrTDURLq}!<7cZ6|2f#M>`7`u z=17lgvh<{bw+~lSZ49X8L%aUAs=tLwN#jX}AGCQ)mBe2`#sUhKMuQPME6Xn7$fn!m zw^(@x*(319Fmn%%jTQ+FIHK;6qTp(#_Va&^ z4#d(-RCnh>6~mI|*8fQQbDk?B^zQxl(Gbtbde8tT-$j_lEre?VL=7^OEz z#OkHy0O;Jju&oyGJ7lTC`Z@iZ{f|~j1Rs=7& zLp>cD(a8O@;_$q&HW%EmIkO7#TVG=-N${V?g)Pn-l~SmRmqrR_i_7~=`C@$aAU*B1 z#=M61t%meMaQISPH7|I>olp8X#iJuja7NNEH4kvC0MeR+KM^1>^EDk_omFo8hxM7< zuF3@R@B2F2o27CI%2gl#waR;eJmDiJDen~2*3f`3S1spa2v?1N zKH)V!ZJg#XbQI6`(aPU5$|a}6RoDH=N|2X}Ewjb)-wczZcq#PuY(!^?#rWB`0{DXe zb+#)V+^kBw&2Ce2@8OoR=Lh}kf7wURf?oQTjWuHwXZD{ujBD_XclcsRBv$J$HFZ@NT;< z7$emNpHZ0&Hy2jMT|YI=P#Tp*e{CVBTOn&mS92d#aHGO;&E_tH!fKVO2o|E zlwZS;-vCg`6Nzk(v(a-EmY@hX5%g~U`*{T4b;bK2r(1wY@c&7TxU`Ws3b`N5F7|F~ zX4AfSt{iOnCCE!;xWfY|sNOsTVn?FW+GZ8Hf&Z!Z{Z_0RKK7u=xA|I~4sg8a+-Bw3 zyA(_c8QvtSU$FQJa&YZuhamo+$$L9zg6)G$@yJ9|ypEFJn{Vyv!aEuE@R2km*u%HT zPV(0cjDI>air&Baq4R46{m(~zoAmK4m03@_7m#A>_IYr_d}S-hZmXYJMzGRZ<;^YW zTS%G>7`<*|W`GCP5%xQME6LyLk4{1HLPFft-_%!T4GQ!od409Y_HhP@!WSTC?weWP zVhOa7jU*5Z3Hn5lBXRs~An|!l1-|A<$?{WJS?lh%QjN2H7^in3&mCs{gse+&$5al0 zgjC(xK_aQ2X!QxGbA2&^4==B#VhXPle8I2t{|aRd_?lBfev2Wji*Uv(O`o5KwRUqR z$xjRa#T9PG+5rtNB2ze>t~$R1cw1gJe%u!Q>YEFDd{~yGmS~2SFP0< zkLLX(>?M>dh-x0SVH{x_Ol`fA0B@9bIA;}^E{)sW$FBPOKC3qzdVMt%F%a(Yo$*Q4 zaszgj+Slp&nzGBXTMAXOzKcS9bE9BVdlVsdfN7#U!V8OWv;ix;7LO7ifNlyf20n+= zhN+cCEgPBONjKrO_|Q@Igf-3q({?%XY}BK$Q62zEm*A$~HR=$bi;N`|3$1tI1$uHo z!_!ZvKQ*uxztJ8Q!FUjO%wFdt+Ek9eZbr7#C(%T!8lu>H6*>+_Y!2NtxKERnX%p7} zNf)#H_yf6>8bY|d>AV!n&ALb&`Axw59j@4bp$6-)=?#Je@8m(*)EZ&o@02VnUZur! znjrt|k6=6ttMH~J2w6Wenwm>}URD6Z43bFaTJS0~u^Em$Z$brIh@#m@?ic`i3%|wv#RkUtEV;N8`VZ+Z+kFawr|gS2GV`v;p-@(d_X+m z!OR)Vbg~i%3SBqB6E6mC$4QvENBgHXRzj5KC!$KpO&>IQRmyBU6#pcQ(y#-ZhM<4oPeMPVkBjYNYXS(psYz%vO{!k)#Fp zE>ZgQN_5TNMX0H|dzN@2$PE%X7J%{;3m~hmVPkvj!XQG-BH>jAy|TDt(WTe0+ww3% z0z$Ts*Zw}y8fB!!wcY;hQo!z8Q83%%5j%}u5%iixOL_aOAtcdI)hoYZXjfX%r^--p zF?aF<8_nc?Oc!Fn)*+?ZNNKQQd0^rRXt`~6uQNinUj&T_3Mv~2jylVb$M63EVG4_% ztJh9{$wLA@@tf`DJHMFVlt+>Eib74a;s?_4#fi+8yvmQ=Ka!^v3Xvp|z*6{%znd(t zTU<-{_Vp3$eq+}LRJ?a(iWf4C_d>u%w;uZ7v0ep$o;wzSYYt;1i+&X}er4$j(|;YI zD>$*|<`O#B2Uf~@^CV2ys}7>i@q0qA&!b^Ztzak2ymp?aYlQKxAG@|QdAxFF(sB4D zu|tA-T4z7EA);RPr(p*ATk3KfBbX|9T(Xa^pib?4z@8r}&%|Pn_DpWHqJL46s=mEb zQDkB4{S}k=_7{|JhcVSf)lTeZ>U_v44nqhHrRnD+@4F68OQMU^+F_KqF^@$)0ptOu zp@z|7gID__hX?^5@U7cs3FY|>#lm@p_w%at0)m^AoKCg=`dIOJI%ee`}7t{Z|Wdeh!~iepWqbbnCz`oM1_}HI!P>C=~t+ z4jsD#Uk`u{eeK11RqwbnVoePhu9+(_Xa*zl1xK~Y-lmaE@)Y7&0Pn_|myEpLX-`>d zOZ61Nx|hpU{HRB3j*Hm4OdIZ94a?bQbpM`M;}$;Sd(jS%OIErKF{9}b0wm!l5qSF1Hfsa1jNrUptL7lq((?y7GGcQ}XzfclDN{QT z;+mv!{m_~ueZ8t?3r=Gvbc$53X+`z&7Hs>$Uj>2~g(>VEirD>F8o^gk!UD9Uex8fY zvPJTdk%@_-wEM@JIHR_&rgyfGCpT+Ocm&n-5^T+Q&*!yKI7Y?my3^P=csuwmi$`3k!GP8&?j7 zWq_I_6dY7` z;GmQV*K()RpODeW!q5}KR|{*ph3(A8`|YEOf*wDleA>bI45yrsMG~B4h#9R}vGrPDPQpqSYIO2Q_k)K}tVp=5~|&g@02`@b?A@KrS2t1Bt4Recina=BQ*mhilS=H#M;zPZaCU#)&6u$IjOGtza}B5mOfqHn5}`vDjnm?YU>8%@eGi7=eY zt*NpsBuC83lz{i_^Qx-L(4z3+w_@zoUdy>t@dR^KFU7)s^SaJSw}oXX@9IQ%_eYZ znpnh>9ve*Da~krSOUoXZ`rwr*{(Y{o+0wKlwbx+W6EpYtsG<9xeTXhDX?(?Z&=In%s7qBt>{^UoTWLNMI&43_z%n)zEXfw0PUcfwosF zMlVO7PFdqR>m@`_C%Rg@ z6R+$>foq&BC{c;$(!X^bPp>V0-m5(}qBgCyi1y9H%nL{EEKhp6>C`@2w>9+Vzqx6f zkUCC|_|iQNngD_XIr6T}U!ANvoR)~4{^{%TVWRHz{M2rt#(YGTn-1@P;TnWS7~VV# zzi6*Epfqnj_=r3T#QmdspDE*~uiZD85h~K*3g2rOqy52aQXPg(tZbZSZ8(r=(z^C7 zc68`yRgAyq@h_3a$akJ0P&uDo9e+GJg<0jGX1u>OAD~V{hCvPPla_!2s5@+R0kF-$ z(q}s$zIH4CiMb~joaw}#v=;ilu`%<|nyYDeCqC$0ibivxM2ydfB}IN8b1$$ksPq?? z{+@mPX+VwWB)%$*e1EsqT#o;Qh1aj;m)~qo9E_`~(e(_CNN0vSXMFKC=t8W@rPNqx zvndNGU|vaLCVa%hVUz_F9hpx*C|oW{nQD{}e1kXOK^Y9Fl6-&RUZ1yC`KteosT`I* zZrg~!EE+I{N!@M(v_4{FUiW~87$_$t!vVexh>>FeOQb3V_{33^mP90Qm1I#rPA3T#7e$cM zhyf5>jy&k(Sd!U<487YC5o5E(1I$~TJ`aQHxk?{`5|LGQQ_r~<-}`ENBE-C6jmy1=Gi$cEqg`P z=1Pv2rzP{nj?SgEiMRjjO}rnQ82{ORoc)!K)8a|kx0~}wK2yZMZJJRn42QJhZnqG|2x>i#bwCi=A_}{$K_!Ua>>Xv$cE|P z;tA#MSvp8ICpQKKhnUklUXh|7b|kTk_gt5f%KCF+zL!zy$YJSe;fAiM-xH`?7MAzn zkF>>huSn$KU5Y3>$@YSqtB?b;9uow(iOB@!-zUB9qnRv!I>yDT@fO2A1ClPBEkIZX ztmg`}Wj`;R|ML=C{1Z}THb@E#1di)k-=GfM3=iYu(4U zE@jNPAJzlmou1Teug46*^SgFEWt$&lu8f%R=1Sv_SjF3W&NEJt1W!&(+b%(5z z0oLx1Zt-)hCBDA=I#TA)B|eMIal#*TrERIAgy){4M|Rchy3pMS9j!HAQR*03W88BD zJE-BvQprbtFjbo98nf;E3iW74c!Cs zv+IZJcdtf%H?wgRXlm+)e}igKl{u&d9zFK9kfx51QVjpn&ra%^0txHmpfSU3e+MDc z=>U@pk!TUYcC2~fJoZw(P{yoVTU_l;z3=(|n8XXGhCuGc&!&RC8O!a{bc`RQp<-*s zEk6~_6@A*%Uv%W$elpnkIq1Z^E|7qziIHCca8#pabgSHa>dfO5I~8Qo?T&J)1Gjj! zefw2&J9guRUiMoTZJn~zWS8jE`dK(fCgDg7D#Wd9P~cK@jnf_-7;jTPHwvlCG|{5G zCmywNL~Pmov!r!bl zg3ea(;ivprQUy=B$$ z)60SYobar%P?TBG06fki%ip2s8C=PHQpc_;g;;eaHs@JT*Dr)0-E< zGQz1vdKZ26&;*(#%7{=JWzM=_)`fgiTDlmm`;2z{>ZZKrvYfLBn#CRXXU}CnIO;7j zdh3>k<(-XzySimyiV?*)3&q*aFU7N@V|^0x9K-aG?MbzCQa9I1=QpU1?WK2bH>oRro7qrc5+fk`}QENs-qi zA!d~XCf#@V57U<@YXk07py2go&+}tnq$xAEctXACFoorNa&APpru>Dhb1`^a#C$^u zV*KXcRQlpabQ+>8`S(Y3_LG}d=NhR!AR%twH>hkuZ!YjQaal#sYx8+K5%eO-{^oc-?oZ#|DuB9`jE!w<0zaSB>)>NoUcye`=HKQMpaB^AW!XQ`~NPN


AH1}wj9<%77r*E-S43Ip0Q`B4X90QnmYPcpi7hRsfRgtJ~ z_4{vr%MX*oD|a8a<>bmu0suXLv?`rLU}OdTB;wS_r{y=JnrXp=R+lornX_AADH+6h z^HVQ$4xXD)K~*hSonMP0hYe@rIwvCaFLK%DqSS?lD&CK(K6kCv9ah~HJ^2-rT^#je z>+vt6mT1Qx0yu|LJVD#%T$jao^TSWBolkcjWTG{T7(R*xS#;}wskGSHy1Xl3_g{SD z<{7L${Na_8!|;{>xs!SHcP88}^hGsZ^r`F|Wr;#mjFOPJF6 z@3NED$`kHKa+6ofldk4Mk?AN|R~IcI0CqBFf0~9$?FIk|7h&R3(oTl9i9l>XjsT^| z9;{@SI;osk0&;a!x+CDwCWMNg6qQbwkVpxk1IACiA5R)rk`vch-sA(4e5{Q&dHd@e zgLjhw$1;6o?qZ`g#$xjzo`q<`LqJ!KE@F9yKN7>OLifvK!rWn_@jB)H7x&E%C1AL0 zM;gK=P-EP&>zC0+z+sL8B`~;HNEFC<=(m4O-TF&G9cR;g?~o0xx~7}{l|X(%;X z4V!)HLM*V}mifQYg5%#h4w=89FCcS?+ufvfI*89w$?nibVN{eIUQx zsOsh>qkM3!XcojkCA$RarZ(G)Ee05P@6$gPST6CW(q|@jKh$&k&j)2zl85P0tKAav zGnQ(8R3+(7%YPoAddMY2*;*QDDTa}tWmCZ(@!2X`TLWR`9nNWaj%#eBoHWukq>8{= z`SAhf@CHUSa>tyiN~F|dTK4RE?Rpnl0D5zop@zqR4&*?TY=7DuO#qm=HOZBLR>%3ho$;zxU=UXzi}Ps1A1hQ0-Wd3I6=1XM)@jc~@A}#JQZM9H zji=i4+y@iYyzdBUA(Ii?wUoS6JmRR&Aj<4Gul%F#H}W(pJD0mM*iskE2RGu!zVvYQ&KcwHG@o>JZKBv z^()dM;Z`9Ui`@<4ceU*y2nOAl;+^SwyWh+>VJ%LRtIal{B^B6|r`>Yx& z35d9YyoA|Mdq07C4w)$uP@=>ceUKEFmDT~z@hre!KLJe#6cdYx?6paOMbmXC)h*JX z`l@c@JHQo+Uo>!Nf9Ch&beF;~bnlSS+M~1J2W{aWt8RcwFCEJoQM;UG^QnQ(iyP(( z=Z0Yz*tgw9P;G4uUjir9S^v-VJs#mhYFB5j*S3I z8XFY=CVe+%GPpg|4Ud(!e-WEn=oFePJ6Ujkxh;$D=sySh<6--G9#;xw^eVDO%{bI!Ub^l{c*g0jJvMP1)ngSp9;Sb{@{My=24Sli#rRQ{ zgy7ljhB2}?Dabw{O*MixIlQZ$={}eYarRu=_wlkJp;?pZ*khjMteXF*K(5eTuB9J45*2cuFVtqF} z=eai>AbblxWSl;fG*@PIRqKL%Nz3~?;E7(3PWjIGV86L}{QQdB<3u2DAD$$i)g~{} zRW}cst5iccHnl|XK$<|fj`K@M9qjr}Wl#dPMVRu*c0wKs9pM;ot2b-n|6VmgsV;Pr zKjlg~Lm&MwA`h(`ia$JRrv%2br7GJfU)zAp7hEKpLPnwHCLhif_@HPYCNcCuT_aIy-KD%H{?sPpKFJ zNzj_YAykemRPcIyWQx^>_e()YLC`!EiX}*jvW0B;wwA=!T_a)M{15--Ymf2IpUdAH zTS(#2Po0`+6|tlql$Ff#c zo(l10;eeiW}=mJ)6bk1DWaH zJ5WJ-C}y%abLniLAN}*qdU^4pgi}72Rc(1<6g$Ph#WSuM_zK07@39FJr*ym_Y; z>HFEJV|=DONS$7)_d>-pZ1-B~zTYZ7#(vGrdTdH_y7LOEi6V=fcgNhQ^L+=Er6~?& zlGEZRk%~ceevw$Xiu$_|fvWTHV)|1Oi7AC{SmB?Rw`peh>`raoS8(4j#I8ZGFNNGs zC7mb`^*vXNC8&c>uHz>7aZ4cDI1a>CDh%H4Id>ZsH;G*^z3LX~MT#ny!McHv`Qw_l zY)6oov46b($BP|II7{5YBjEIDM3O!yFGwx5_r`=V$qob_Hgc(^8H^X@sNoS6tI_Dh zAGnxeJJ)qZiS7!c`VZ2FBpRN~J*?K<*FLB+-&&sXN~8d+uSRRq5BAP4U*_Wcx8v>F zbSbAEca;x0UuR04LJk=s8xoSN1JE}toMI=cOAsC*RmX>QKd*b>%guVkBTjlhfHL*A zXp}KK?DG}pOR6&b;XIb@tA7PU$4F5h?_(!Z0EPo&>p9W?bi$mvkIvVI@3OsdS6_L- z)0%3qnM-ckIN`pKM8MS|RXm{gHz0ITCYl7iD-~7FjfrolvR`}xF71?;vVYcSHZ)x& ziH;Ij*W|O_lew*hLfIh7h}vsW$m=Ij?-rsXyxjM;23eutPA$t<&DYrR=K>}bL+(@{ zo9GgdYXAG$3z9R`dwieP>9p^P0-ju^{ilA-U|jEWgm@QvLPk!nJR!enNYVKkhi!&b za4E4W;L@eW?!d@#oFc@7$aj368T;Vp-74-M9!O8AoV@S13I#}uMY=qY@D$l+edsW- zplRs8l@$H&|4T}o-fSKxWXZVo`SX>DLP1U%JAwAW-jc4wh+RciQqc2Pk_}n9)RSoK zl#JCo=+9Tq^4y!u3#6?DaJ!3?#PTmg>Coy*~d+U z?UdR-!qkQ3XQhntU!?n=jp8t!8^dwAx)xE@x{}^VyJ#kUZqmh6oqms*M|w1z=35Bb z^6POkOf$Ro8NHCv;${%^Ba73=wDS_aS3LKL%H5FR;@w>pGbsO9D)RT8R%)NLYp&k; z={_TG8A6~DqFW2TRB9Gk>!ccqe%XBBTwo5BvcsRP-_z*)pju#hLyuVBis|po+<@n} z&866m!Ze!zKdXOkHH6TAadcn3zzyJX!^P}_EOZ_NwP|B*c2$3HT$c@+r@-kq;@n)& z4tX)l%th8`gZ7=Y2wL0wHt*ixLkD@;Cbgkq|LJ&b3s(Km=2!N}q50Vo>?8m4AJ|Z? zrtmh>G~swB)0Qob3rW^+cnjqdFN(-FG7I(Wv%`&w8du?4P5}-D6Z-?1Bc9e3fr82{ zmmX-ARkGh&nEG8A(%RV&5Znx?50N94fDhX&x}mI8wcQ>taxbahH{xZa@-h+f= zFux^dqtVo04csJPemm5BE*jale)!MGc3UZ$RkWzyp8^2l7?H|HHBce(l8EK;_F_+D z<6~IFPh>1a!i~R|joK%ZX0ConW1b0s z1dE$XGX{I}^|ILy%o#dcsAl=$nFHahL(PgHLJIkD$mpk>cyw0Cr9Tfukzbr^=v;uQ z(3aDa+khgpZl!kcQcd>LNxdI;BTpOPvxipW8fM$lfylG99xlB|Cyn)SR}f}1Li9*TyEg0ekluYozX-iJ zi!NfzldBhUAG2$#F3BF3)iUI}VT)aN^v9Q zpeIG3lif_~-X#)rRG@y9OI+muD%8R~O@0!d(>I3aKnv;rO6Lb!NM|lV#%&F=Z;H>K znpvX&Bsn%C=389IX-Y00KdDkMXC|SR6wh_*obDkP@o27QB7`tEJCuU~yYJ^-Fa%3& z^EgTxW5ox?j8uvw#&*ZMb;_&XP7M$@!QXo}?BUL%!N~;%Ov&7>akVEj&9OtRHzGHi zSlMH|^R1r>twPjwyEwus(woI}h_pO@(zk@NyKDWPJePk5Tgj6QG?6;L#2zJQSKzPv zPV~RGGhH5xduArW8X=DabGgnuq)p6pvYn(JHI;ZYLV5Vq+PI%QSpEFyg*okr~ZtrB%NsgOIc%&W@aW}tt4Q}lM^(T;(oa$nEbLmtRN7#raM&orKc3rUC9VzztQ#l-D>&KWzbM zEjkaTz?V}ryNlhQmGQQ6eTC^x995-uea>mFyoBrgdo2i1IgkSARchUN@(ub4nb3Vc zZ1}EO9kErpp}vA+}0T5eJ1?d?L3|>5augThL}@}>^)bp z{6KOl&GmpjE;z)G@W@Y~Xm)%DmreQqn7ZzGs{a3Pugew69w||ok-bM!R;BEW?0t=E z@0-y;G{_dEviG$wvNA4-i)-AANY~}c-oJx{k#=I#96iq&dfSj7F4P|$muYQOzU+~2G3eZW+- z_;!aHd@+I0Z!u~*=viFJy=+ON?U(i5^yIM3!LaKVT6vVn)g>^g(?01v zI!}8#T1Oj-fyplP+-aA?DHwO^kC{j;%o+77D7%4}M9C5Cm+k^?`*Q#(zDCHp)rL*;Ls1_~4#Vm){)n+);gz^h7 z;4&NM_Ud=dhUFAV?KL2GM24nVkgafqf9GdS2it9kdC26&$Z1xcUP$=AZ-WhEF-D_b zQW5^Ktgkg?Mh9InzY|ybgopM{%s8`gEq#-ZNS=U?r2un`rBDO_-6Aw*#e_hA%rG@Q zyq5V06VvbTW-{7m5?U~{G7T&7QTY=?CWBJ9*hVwCQ39DrEX z*AT^$SrWm`wxt{hnilS?U@OpulfO9MS|ov8t0& zhi;P88?~6V(b3AB_oW4&7OE7$6AE11rqq@J6c(ejZudt`?Dl5zuBdd;8&J08P~iGy zEet4OC{ni@93@iXs1eR&ly}W(hd|}nd#WcvYsD+N-N>~!_syKDb7_xExl+@WhojUg ze~nw}_FoyukO`#Sc+`iA*}e3@i;;9-!2a@2VD5K8fg5BUZ-j8MY>W??{$b%~zaaC^gRd*n*BhpzsNhyp>x z{IB-*_aQNH%K0~l2}U@SV!vmNuu7TDN2(;v#MxQr3yzWNR^1*aCp@FXRNu}iXGkLD znv_}O1;r9Qh$O6D8(H;kgGn)pNUZvVJvd1|;`d~Wadjb&pB~3jU^)Jl%hrR9QK-gU zqjl)DkPpH%(u!o$^_-f&jPD)S-Clh9cX{0n*x;)cCEdF}FGT`-x@L5JVVU|3!55}x z$jOlP^d9pmr-9~dQGEAp<8W!kxSXBb8qw`ThZi$C97gks@$X3=>6Yfuez+|pC57xb z_1BDDm;Mhh2#CDKr?b!3G80g_1Z%9Xj}hjk|CS*0PX2sSbT~3-3HkMFbVwRdfmAT$ z^2#1P{jThk!#Z*9DX$H$tVzZ(-u**D;1vy)B74hPd#W-AKmC*t*F^0{2=Ev0z>rDw z>m*+CGCez1>+idQl-rA@$53|1PlA^A@ZpTx3e!Aao+=#7LT@eb!q|YkY3asO&9L(x zUQ_Q29%<-Z`)?ZY%q=L=e=(^^MEy8{T4@RKjrgxCdTa5J=~Bkd=C)tsHEoQ;5Xi}5 zGU`YiV(zQzBYzOMJtP99^k)n>#EE3YeF0Mvi$kGueN-jgFE zn{<`{l2cnti}rgJS27o{1`^n#$27dbRf_2>6 z+00VJOLB%b-yR9_pKR;Qz2O+Ab_+HjfVQubZTGsuT@@x)sUFrK7I-3i`9_WCHcrN`Gdt&=wb%$^ z6VX8X~>U={3o5ij;S^RdKO9wsX&$AKF^M2NctZ+|? zpVbIpOW>nCe!Gxyd!D4=7XZlq(q$HZbW=^i9ohJ2K}?Rm$(!6(z)xXztP0X2#A*a= z`iM0GyX17qFL8?hCJ& zeB|*$C%}19KDHD&{t4-aV(&G^v83In1!l;L#yCx4<0d9xN_szFBu?D(9MFw@s?J0S zc1PAR`#-rLGzIP^=FqM#`ziMj=-l@2Gt+Vv;#h5bg%nioN0ST2le%oS{p7v(hWeT6 z_S|~zbQu0TAuva*ZF2^Y5BkE3(+qSg7*2allSU7nkg$tw6j-^jPr>p6HtjMkA0KD^ zqBCJd@r22zb@ZXR=alcEwD6sm496`=LwRwwvC3z^oBhv=!dGW@;eTRuCmHbsZB@g7*!9gRp$T)r!=CEPm zZ%>zZWpuCDy*zxOlq~GF%33IJPbx*g(#81as-I77noqT1cX|E`9BVRCQ@yy+CaJ`$ z4Hf9kL1J96Nf}D>CH_k}gB@&0_@V5Bo9;H<{B-4sZbRCx8fnv@%ih-AV35qzn47AO zb*kc#SVdZ8;*}#8|Y?K@s ztZ;6Q($2~N0iEcb+f5~U^g3V@t)YP@$~CuK6S5y)V5ZGbW(3+nz5I~jYL9`Ztv0wn zr%CJZ&PiMaBCF`j-YB*!go5^0%;jZ{G3xJX+pIT~wioh+OIg$C*ECIkd*%60Y>w{q zq;3{-P`YP1ph8`*?*~#(?0hZ?8Ixgs=QgPjv(qT`9X~7#>46c(WUHrjJo-6^)3mW@ zcgpWmB{jtsZzr_@J27U{oVwy2Xs``)ym#nvsLB@%%{fu zw@uyY{^@3uh`PXD-gjt5~++{u=IrGL#a2%5G zBUxAnSeISr!(B@Ks|Y{h2YfRmC0+}qKkHZuNKAqLej02Tq{;{!sz*s)g>i4JEB$?dhmIz$ToY)wICHBc4CSJtQY%>FLwhEzU1+QWV-C@23{>aVgV}u`b_ORD{38gCZF- z;@)P|5I#V@h3)$Z{2A%nK-@_fvqg+q0Ja9|-rGNm7VGYrQi>L?9HeT|PL0w8eXYwX zaEVYBQig7DmVA;bXsnLW%m;KaH;XfojalRN{!W)~R%Qmrom{fllmF1k3NM}p2s_EK za^TT@_Ndky+e3FpjYkg5?Jfr|)Ebx}R~;Rr_NF7BcPuYd8zNevkk8m{lp7c*H3!&b zci2y+1asg1-5Nupg`Gf~?htS=Pcc7+9m3xYDDlaEy(G{Ecn<)AL5karkYPS}u)@>* z(tLJqV;US-#fxM@3iRnh8^Fj1&^Q|o9X1lb%%COfTQ`BtH^l1##4Msu!rJgo=T4_# zt3g4|RZ{o&bWAis76RNceRhN{8V(L=DV}8+7B2%U^=td@2Rl>f2>&tm12XHf8r3f5-FwL4?`7na39)hz9ngkslfa?i^9~#43po@) zQ(S9>mz{={0LjI#{J`i>85z?%XS26-@@>q0`}}Y4K~dT47MaxqKJw?DfJgyMC4k_t zAq+u!GymB~-NqKb;8mo4;@PDeEsun)m=mMFV-x)n4g#u#0b_zDh)B8wC$}+JUJ!2{ zQc$#2M9vIWtp2fCzSup*zI`BG@JrrE<)-`PshMJYGvL*5{!kSH>s_RCWQi3ngzv0AF8usG<{{)$T@YK*;X z;ES+x?i_P*R5uK}+;i~?)zL1>=IHFk&JHRue(-`6g{vWTx;!I4IMUCr?MDW%L02oT zK*@jJIA7cA93bxJq+aAQzgvNwRO~!#cyrEN9NaGwsh{q~+qrocWIZFYKNMBHT*wHr zxE?gxMp5YU`2%&ad{3R1dm3GddqfHd{3?qEr4!8{yD9h3V-E%Vt9fvR&0435Gs#kM zwdAZw@G_^oAJ&o8Xf{E!{EQ1gRpNo)oiM5fLID&HMEe~Z{PxISo1h~DiZ&DVLhauL zEG=ueoKHKW%E~9%K{oUZSs*pN1qj@jL74ukYhL2~9915urA^d~?B^O81@@St1Po26 z?xSefs5=i8npwn|-1@SoHRFbBj63xMN%$z_i@n3O3isH{WNua>ILxpT^pSw<<;?g8 z--KCX$GNrf4dN_vSx*)VG@w{R`kkZ5h5rg!a$E&2QYi=-Z{uRmZz|BAn1$Mfm14r= zov-QC^k>^7axQJ_sD}m(-yB;wou1~$oOSR6fCsZ<8Tl+w-0r!!`iypQ;(TNu(gQQ* z+q!&Uv+qE<-Tq51#gFga!eDEFb5+E^Q82D}ODdAZus=OdQ(UZCv-!fETiJ zDjMPU25Qc7_=}BW)_2F>*qbP{DsMK}>}N+qTvtT2;i%bU2r}JTwpza*=}`*K019pp z*Q`fOkV_%@^F=x-PO=i4tkZ@3bfvR#l1hCj`~IFKcJ(du{2OURCo=jA%-WG(p^TBA zzU*S&)iya3aYlK~*Nu%83(N1P0K@k{9)&7)Un5o3>o0pN?#=n1cQC=Mf4k0_Oz*z8 z>XOfS(1aZuc?+0|Kt~_`^h;k0!nD(!ivv7eKu+^um|MnX-}^@-$iirVxUz8j$%yVv zzZCr1TIh9lplTkyZ;h;TijE6Bk&R6p>I_0EZcPmRMGLE}$aU2ea&kB3yNiahP&7{eS znsK?8>}c1cv?Ny!I=?))3r_E9c*Y~<=fC)X1v^#)B57p#iM5oTGAdck#U}Sad2S2q zukiGNM0ORs{;pQ=mE@T_T}q^no_8%`;LA7mEt`&8$k;BYfxp|w)y342+9FG)F?m`K zro!7biwk&NWGiNJ)SR_@AhRpej7$C@d2}KzMU&Ab{=_+;<+e20dD@59F6G0{Xjxf; z9^pr!?Z+*2kZV?2f5$xfYI$VkkP$NVfG{9Gz_=K=|IS1#9?O9WzhNGtGS#c6Y1M1@EWGaOG}wdO^PWL|Zf4283voyyd6i7l zG9)uzkTblQ{)}f8{lJ<%kISL-{vZ)hO9sslZ7Wn8KKPxdt$1a|^Rw&Iub+xLxhSI- zd|p}>I7N?8*$QkaB%SQbOLX2AVpN>(X^gn|ZT#Y^=K^+O@g-UN3G@uI?*C5q+)J9~ zgOYC}M~pKJPpI3!;e5BCcaHNJk3u}XbimcsI|fT_YA!9}%rqxY)(4d0*GK`|GwVpQXA2VJ->R^EzO@*JjJ8JDJ z6Cz)9WS4hq<`M(VK~K<|@PGWjGn=v>qJS9K?fg;H>;*sTMLm%F;lW*y=B6RK>E>oYHVVMt^|($efo z=xLkN^q&qIK;KJk8_|7WN-uw1DBRJt!u_q&tyk}Vt~Hu{#}s8qiQ`3Gc;`*?`(Duk z#YnPL3xN|PtrnVMOcn5DfVnCe1Vj^CfrnC~qg4RWPYyLw;uO7rQg=D8`3sS!+L+)0 zx^0bD9W@}Q4o$g71QX9LCVz*I6a+zc9YGvLh%oZI`93(oA>K z$VUNye{wEY{D;QW)5mgjJ2Kk^*^u)DY-Nu`C{~ zQ>jzaonIRXX;(@=PAmu6Mm5%iR1w;mq2@IO-#Z!}-BdB)sMN@A7>s=XjtW=_*`7r+ zs{mZw!%CX3sY`1+hcCErh4NH@N9%JBW2&ePefum?CR0R6pv?A3cm>(@a)j!yMr zy!aPA%1#QOJj>^`kRAUN1uB4~xFS-Sb$i~od9(0R%40wim8Bm~|87_+LG`Cj8W7u#B`_4uhSxJ`@bmiQPqjrRR%owQRQxA+Z_)k|;T10~%G%=2e^P}StRTm|J|FB}eAyLU`6@0BS5)v> z`WZ26CS7P&2(xMll&gKFvqobG)PRd8lJQCkbirL9;K8{pOfp+F(@3l7ZcFhH(ekn^kcSKyjO1ty&@z3*T(i#E+Q z^m~x)lFj5cefhKWAnQ*a3juo+|E};HwV$Z~CoscAy1+#Wm8s~3V#eC6TKv(SCzcf& z6wLo!KxI99riDvRhlESEEC~~h{`4B)6gE-{9iqKk6F%o(Z$;G4;k1Y5EUY>RU^mO* z14Y{!%TyFi#5dN`Igj6N{P;AxdMqNZ z47&hcZjw=itph}SLicH2eupLKl=tU3HUzyo9oikFo$&)K334OQ8JDBi6^rV?us&sz zlr@p`C?GCQ4yPN*GqJhMQPMf`x7u$Gm{6E6tof#cb}!D==w%#KLAEMJ9!XqhY4Xn` z7wcA~szlAnY^D#~uQPK`1^=RhOqTEpvMr}mzNSz`P#!_)CRVSW|D^6N{<61h7sySL zsH2gQ&`ogH-EukQwc7<71uUjp_YjoI`&1K$vBSydp909ar%$)BaRZnAq|4=D5pEl0 z(J8QU(Bz-JUL82@N&P7>PeIWM-HzrK$L?hTf}x z56Kn*Ie&0(ofM#B$l5T=k z?;=Od$8xk}I}Gyy`$`H-lA&23X@p3Xa*XqBY_cMw za{&0fKWHJcl{1mJX9)FA8G^HKfjfe0QlO0Mbt?ZhiUqqn-8STc3A2FJ`0*TM_QhZT zE0RM6Me5twkGh0Ba%mZa?__g>K`i3+i99RgavV+AGcGxw%xu%q2YOwY#T5?`C2zJ%67jv?OPSLqCeuvo?h?03N#`x4*hR z1th$rtAUwSay$&}pl&cal6B*}2#*KK;;%P+j}ai1flxqGC+2i6c-0)fK+gIWRDWGK z9jL6c(#UZ=n5Z~Hx09G0%O6v#js)v5BmB1INJ~-%WW;JaA7l;LUEF6mEwK&G5Mx@_ zjUwjY{Wf#sGWyUaRsdv4pIb(S`iQ$0g|BODFX=eOwbn5ErYrv>T8Ix%>yM`U2C{m$ZK96Z@PD;g__X)S`2POxmW%L^^D=AL&NE42`{_#f1mBD>jt% z6_fAXat>BXmn5UGL&S2*4D@izmB}>J@Q84M-roV**tOeP+ZHlLFKhJjDm7B>QQ@@p zU60FY1_m~n{}7iM?!!OhS{0+z%j8V!ktGMxm$FzC^tKM1=HD4RXq$c0%sbeY1W0(F zD*-EZazYR<bnDB8APd~96&(*fxy|L-EGDSjI@!2)8mp0gKORf*7k{OG zhmU?n&P+ufd~cW*d(~CZmP^elBB8S^1S+?OW(LZ#8!kAosnI>tNIcy`lru5X1ub8^ z6|iJnLBf4}kBP+E|FkT-!V_7;x!wYKI{OA~RtkxU;!?8r*Fw=K7AeznGoBa;3Eu9o zeH@^u5qcyQJZrL7D|Vrn)4{sGH;1sV2}s}vP2|NarB;$%?T@6KiUtOoxD75Y*2@-Bw=ceMNaV64bf4Go`-a``9okPEN3> z0>OuYrP^!h{-#nINj7ECyN&cl;S^qKUjdZ2o#gDCS35W&zwpTuBpWnT8 zw0_rFb^!aD>e~0_;zOyH6osH^N&Et!W-55~voa2N!*&qf3QCM#+7MhdR@g#?&~UuM zw1_L$m?K*ZYdsZ#ZfW5N^{up-+CrPM!wej^JRu^!6mebpEU+Sv;`eEF)e?w4;|)*Afc8C>h-br!bO z`+xb){=G8vgIYO|Iupw7%{AZ;Q}6U6^wUXqV5K$s52zF<6`O&^N~?Lof)I^Jc0D3)Au8&< z_SACHxdQBO#%(%s=h&+)WR)-9kRG&ZIsIa2UVLJx#S+yl%|MTifQXZ1$>>! zD@Lt--)5J)!mm=5{|sbk#H?-e15jq!7|iHo^(Quc`@dTqHMO((QJh96x?G;<@~Cfs zGrH_OAu;OJyPro@mLZJQhOIT3fFy^hJT_XkH28W$EyvV^LoWI*ht(6XxiSFVVj=)Z zNLrz*kw(5P04Xqt_0xP?+?p%im~+{Z+#?zBTL&JJNUnL{$$8b|>7HRrrfEtFNV+%5 z(}d7#Sbv0n;ntVzt7<};F4^%%u&5^fL&bBUpS59Pz=Drs(ci7aRf{tJXmgji1G7E zX}ImhEQ=?5Q^EGv_IqwI*Zr(iQE<2UdAKf;E=%Dq+q1mZ3a)o|p!-<^V~X)mrj+i3 zm59V>=WqH@xfK#Mvo!fq=TTsqr#a#A{a5#Q>0&jo6530L^o3EWhUhQ{KNQu?&WJzu zqedQ+S`{FxZnEtkGuLwrQyBB3P! zf{GIJ{^ogjx@XpP=WJxn_wBE!3DDng%3Q$Xx zCQ+r1LOMM)guFb#n}3Rm`!>zjntAdGd6lK>vTnL^;Lqi!nA%q+W zt4%FX?ss+}IGYv%)J`2vcT2idAWogBP$ z?th0yOU*VKF}cBUr^~}K4a{KAdDoC?LIiyqP@B=>{IHt2^;l$k5lX5g#RQ>ExG3bK7|Jn6VZ9lI1z@x66>$6+bb4^g>bKJ$t)WO`K zT6VNs#yc@i$Hm(I+3Mws$JvoVw$Y#I-!5c&=3NdZiV5VW4?gZgzMMv3-VSE zDd6FChW^2?<8;j)J0r7}V#sr`U;3(J^vqa&e~$XghJOhl_?AI&y{yDhi?9vq(^~eK z&Oc@w?TZgO9GBnCRb;Uwz~ZmIF>L)o&1_H0_ZwF532hWko-4FXfLlLspFZ&BUl`w( zC;`3GefohGx4Rl(6;ccRkuKe$_WHYhy-kSK#m)ZE?*I5)nfY|kG>u!J0i%-AWD49p) zE&1Eda>_|sw;gCt{r-7(^>gU--i}K+X^rq7 z>IZr(o|G12uX>&y3Ft4W43;CxSk%(7$#nJw-KlbCHB8-r|4hJCZt zzi0Bbj4KljcG2GBMpCsVi*inxN*Rq`t%}#0o|W#8sy$dRI4vyHHUG6U;(Y0j0*T+N z4w{U{Y%SLwv`k7~5@v*bwRdz}2`Wa>8LY*W4uszHRWX4<2iK*px3zwp#mWG2n{wPr zZF9BgxF`0y${j}ZB;#BcB14KIc}wO% z4O?CVG{tmqN0X%`jbAfS$x1|H6<~FbjZ-AGME{^}4yH47kLi0$7%=sBu80z(FM-u; zs`Zw6^O#c#`kBTK4Nw3b4X31E>sQ9@@3W=#E7Z2X81Mx$&x&4~msl7p!vjulKnCQMpwjm!TXk}X$A{5nQS#3r_V1V4 zl9=E81?M(7`TFMIXRP_?zOG~W{y|4?&6ZDpBao8;L>+c*zjdg#t-LZH8x04qZ*is3 z1zcnPc|OmCMb8aarhMWF725?lE56!3DNaBN7h1QC=#!3D{emT44QIT{%zurU3GFn8qsNI6D%p0yI6e4Jrqe; z@ZP}XUgkKM?gheM5l8130V&nHL>&u=*qfu%RzWjMB{hl=gq#Q93if=wP0_`zB)Zw- zX`P{QEoo#ZZkz3`^$Juo2j0KgLk!r|C}+-taWf~emEjKG*?O6+xyomwtv*1(-CExK zFNgrg#@mqs;%=meYo^;RG%_m|KwBg)`jn5yTym(+&3%U{c#jQk`xT1wSA=LXEPaW( zwS~BhD`avQ)9`l}G+&qa>=Y4Z?wW&)VQC$?zKvPI#t1GcWO4i*vO09!9uq8Gzg@b8 zxc85-c!|_o7BG&JIPHp68C--u{aQrFE(Ku~R}^chr$${ObnG3sodazZ6{^@mz1Ikn z2Eg;;!%kQZMLKxTjbUIo)~o z<<99BukqpEOGy#elNA}(dcj|uzhR-VI{+g~frj`;#AP_T7uN*LEr~L#>Cm|vzOO#hHFE^Pcd=`EoxdC8aGncYg=H-iiD==bo%}%^ zL_dmZd1y-SFsTT4IYHfH|6@F>EvmxZ?tCa<o3!=~;<#PzJr{ z^$%ofsAW+K1qb6-2ACu4wh&Lvx0fYfW%=%B<(%B@8F`*fs*elODK6v37`$Qv_q#F? zGKnn_ba`soKx0`)WzXD7pBdBa7LM*OQ~4D!OhD5EdLBQk)tniD0+(l+C~A?=Dz%O3 zv|inAn=bgsbl5~JcZonyZe3>I{xfa8?AUdOZM)9nF*(vBD!Ix38_&NNpJDK<1Ckm7 zS$(G>1Y-WaC(QI;u6Nfa&m+e~UK6`C*_!<$5Re=YkOGuF$X~DVb~|J!IUS=Ok90>K z&w8p0*>kDJ7)(>V)rItvUF{A3_!=lp8VrJik*5=FufntDsqOnP&P68B7NzlonFzX8 z*YZrg!6h!dWMv1>;BT7|r>#vLj<$2DjBfEuQFeMEFXh}fglh<={P4IcaN=Bo-|&SP z$Lv;O;WIA4eplwHitC*5{|7-}0nyMdw>J|_1M1)$gTD4EvawfxAM)6MCcxmAnDJ?C)sNU#NhG>yR)vmkIad!7mG-*B7VWhq6PC55{#ewLA zaCDITSu+mpCZ_6ieUpBAQmr1G1$d4Uj?7V_t!A4HaliC1TU1<6M1g%ks7dg_sisi*j@fxA zdP_NMtfTg=w90@7>LVq#oQ*I>X%!3(wtpX`cA8*1dw$8pzy5vcG#vaq=W+eh+723c z3yH(~uP%L!U;}h%D2!{llzgk9@I3yO-@Q$(aMr}bppAFGxVDvekF1yRQTN|(${A~RSsYyJEloaq(Ep6nU|rE`-is%b~gPyKgM10U!L5~pQ56Zk5z(RseGfdOcIQ0PJ_4JnmdBihn+^Wu7T&B z)*ixzQ(3?7>gfPh$+s_P*gPvfd59W}|1~k@6A=d+r8z=_Z_`t%jewRow!>PRT%nG4 z@WN?T3pv}KJhfR zq^PGy2s^Z`OqJWbjT;ysUc23*yVinRJlchm3Rbt-a9ot2GU*nR;sB5q5aLaenHZ?0?n)*K&nv3@b>|Rr$6#e zEl@%Lz^x%MP?1{~9w%7Sc8LF6V58#ZX+tS(z zU%Y|3B$l*58~gFGSbgb{%S?Qf2L3*LhZcAKs|)O{JT}Sc)f_IUsmCru64f8g)9A=M ze7Q#5uuCnclFwL-ojI;TFa78-Y4dJ)BToWgD-!i7K69f101s)%t%Ca*!rq+39j~Ob z-5Pbb;D$xTza|)9=r<*_N<7e;}wNuD7g=Vg#2Ew>I z96E?tuu!;=IY~obQc-H79)*8I3fVN?Mr(4k8BUU*zY6ts>qTFg1*X^lk#ASn|NR>W zUVVfMmkiX6&|v|JsoO%Buth2tM|KAcFhsos#Q8^x7lj!s4!nRyYavCGDcC-4pxki#+>kUT=!;*c+ zKbPN;eZ^S1C6Z1{X^O!=0UUpI*LanOHQzs$?o`W={5TS2@P>MgRI1!<=X^boLZfck z#f?w{9XpRDnW$^cD}gISfZ(qLrx0_E%EG4|=2o5WF#0Uwk91<S7WAsKy z5`C1M39qr#pk`Sgw^PnL6rBVOX1A8G%bk*5a$3R8`J9n;8T)6W$#e0;Znn`;9EX>; zi`wz!Ax_K*HCZb`l+I@Oy=)#OU*97X`2l3nCy2`x%Nn#{g!^V5#HE*nB*~ppsw`dD zo7(E5ZDHwO*$J?v2%gi~JN$4h1O<0n#jc$0w&a7)dImlqHdz{ODULLDzL;HCRN`G2 zu=z=3D(_Y~if#`{$R`Ilobe?iErbG8PG0d!S$6ws8!;R05e-`13^Bbd~GL4U<(f$<; zKbvyV(LdtZ9dS!RLXy;)pUh(7ft;uH0iGmIuzlJ23pZAY^yHk0YnKuJh@r;l@w||K z^Mc8#{R^68Rgdrq)1Q%s_GSLeMN0xG)p2Bs;^QJymokCsV3#O+bN zw9x6eHQk;j>&u#{1*|%pwFmy`S1TW>daq)U$F|pr*g*@r)vh40Jf7|w`*UIzy}Ukf z$K`Kn-(w};VZig8zKh1*Y-Q0;o|rH}c57o|X~BLUK&Q(!21a+dgmywd6v*6YtfEvp zB6=vL=0Ntxl$TlG=h5kdzI67&tMkjVHHAJp{#)H%SVB78qN=|G&%{P7e&aOydx@QG zV)9;iHir5UIBGzuM1K>iqIquqLd4Oz=C==TwvHc+ls$OmZkZofI&hg0wpx3R(0V9m z7B)y0+ks!;dUP(n1@4++;fQLgN2yEQq=9a zbO_*AZ-Tq1TE-cJicKzCJ4kXmMr(1hqpiJ^_yVkhF8F9#t1`Uot%S}1iXh$y=TK|G zx%}34iRihkQ|73&bKaVzZCM4Ts6yrBC8QIaH^EuwRroiP;=FEP_w3hPl`2D9nOvc0EwYf zPInhAq~5CE(cc}HgYp2iO_5ep_Jt|9wDdHQzFJaVht@l1ms20EOHHgqe)0uEIC}hO z2QbZ(AU1TZ*bDKL&Ep?CXy8tHLrKntSyMACkBio(AJ>wq;rN3FKR)pskJUPJud*Gj zyq$g7d0M(!-OCE&tsV+;sB3>Rz)-f*=nk0~At#mcqC?C^zu_~!304Y}!jyX_1!G9| z-8uXystvb7m97yN{Cce&RJ>Z}rZBGJ`^fA!6V%F2vX{$_H{nHQNccoJ(v3KwXV@U9 zcd`DR3kH4KW1j62(q{R+!1gItFZ8ZVg}=zB4_=mKveKn)sG>}j$B3?sTS!?=D(>NO zYMFpR&0!7R-H6Xhl*g|3UZ zbc5>lUP;jh25vKY@7rxP#gTwCM^arTWYO^>-&m$>Mxu@7@e(4SNAmc;;|?z^PH}(z z7xRp+blV*y+|&?^ap|;e3o{1+suIkTbl4OwQW?LbxEp(;M~J@Wh>uJ~93A**z~tbg z1g3|+?dK6C&mQSRY4rhm=}cmzYjjVjv&{s}k9s+$U;;w9wSLd4zs72j9#c}_MxP0b z$|ZaUfA*-_5XrJ@8A>pUgh8ja0}np^S{qG)yWe>{DerD%B#_Y4n&(7rh-z5j#O41> z7}t|$f3Gy1T)r(trmtPYXiBqTJ!-3AYgEqPjb$HaSDny1IQ|fcYxgWAY#4sl?_=pxi&R2t5Z z73_zAatY|Q>wh{|guZ39Pj35oLpylvb@XhahMxS{?keNga^lUOn~L*Lv;4cx51u&x zF*FDGN;8dzWc@1<&jMaC+%-ReelK|ip5ZC5&a_CE^($}#&E|z7Pu^Iarx+awWnlcu zG)Vu^rXnCq+ImR~`A7DhBFQ@nUT+HcQ1s_R*wO?^$*|hZDQ}@kQj^?^f*$_PCqq(; z;-&W(edXWTAWLj;(!yk<{F^vw8zG|QJRLO&_lr{&G4dh3)+n%EnDXj~b8zhtgfeP60If9+c(xgzE^{Ro4a=l&OywS-hE%PNu3h_Y;^ zF%txbE$1wi#7sAVahqF;-0`jI1=yD1&YDvKHecpHfbIXk`^ndS&CDxwOp2Nu#JWbM|KQ0lx4C zon=vMF-&o7%c<%OJfsO6=EW_|TRC%|TK_s>d`*(|>~e>%pJr3BfAvoi#9#tz9tU6)pxfE0GA4Uw8jr)&Jqi-bOy26^`%jAgC*Il395oEfWN1( zSG%PYGmDT&!^9xfZ!yi~w>)NP+n&hWGLys9>!TNT00cd{W()C18CI?d58$2f0^3Fb z>++|JW1BPUM#f?>uEPM?!fO#h?xi+J_vqam0(*)yd(%2q z@R96x|K6_Up8N{zEgFljUs?#MVjh3l7cD9r^YUEbBz+j19MH8a+aREZ#d6O@hB_`j zO+W9y&csXR zHANt~4l7>c0dze-INf_itj(_`;kx^E&)V#@t8LHtN*e194xu1NakYCW z=aOYfQo#AwT%^7X>5|he%hWO(QM1)*7G!NM75wXgyl9o6?P^_7y#S`7(G$^{(?2>m zj6O)Wgi~csKiLYl2APXpn2)axObRx1SwXhqNi0j0v1##=3!ppy&(LwsRBT(QSVT7amitGqiZ#X%} zRx_y)5-3@IZvI*2o|pb;%qe$C%zwO%1ohNbd zo-=MeARwkO`9fqux*O{7?}g8J_MH)isG)UUkH+Lwgx=%9B+_y80RRG69 zYXXy1gz^D-aT?`)G&yKU_Y0*(W~F#x(P*e(RS&>cBQTs)g-!nA;w+bnMIE{dG(ni z$_5>0y@fDrU59eO9yvJWgAjl+z9F)`g5HA``Fb>?BEbngQ=lDdBr)hNFcs<=dt?)| zpkX7G3N**K4qFq*!!g^==jBT{ppqB7Y`bM@Kr*Ch%%cB@X)bRxRDKVa{i!|ECUh_; zit(m}KYuSSkA ze#q33yQB)BgJjIXnTQW1SiSG;)eh%nhtI%jJt|dY9k#(OW4-5%;CFMd?toX!3guO| z9mWdGc2!Y!SGLIHDbvOa_!Brj&24=Z-Dq53$=eEESwn13G_7obojZQ52P^Y;T9B^# z6hR4rL^kC?O-TI;78UCb1nv|B>^`G`(2Ap9%>x6DD9XL2*~L_KX7An1Mn{GH<=oqz zF|hgf?K1?lG$s?q9$EexD_S$=U-i1XJgBfOzb1{P)!`i-r`+)e()L0JP|GWOL0rL) z!&bJo4pdxXyR6O-RoN$cc^C26XFu}8>Mn8)4RKzF7!IN zRbN>Jenflxl-0Ov*_mOXF;4Esl)e)|_UO8om;5*8oRbuHNg%&mbMzs&NI+}$-XnkS|rm@O5k z#J=Xx;^|v_)$!jPN>(J1)m12Fp{Aw&3gNrRcD}c@ErmiQv&A%MkTqSJVM>{W+rlA3 zp{nTKG=&5RJ1>D)SPVNrDw0_?5Q(c3y5xSxB4U_Zo8)LF?tLTkQ9Ugqee;(>3(kHN?Mph5@<#pMo({ji8j!e)yiqBu!rzdQu6z^;Wjhy5*l4_@ni3Yg7!Tz%J z0Mt=FGSzO#P5e>Ps<&*wnd`4l2DE7A^bdD#Kh&r^LEUZh-J3%6V?gZ+g`s^kwOYi$qm>*5R36@oS4+qMB31+97(nBEE_?}h4J zqq3Xyz!5gkMS)$d6$4fjFo!Aru^h^%QBv0pBX+^F5Qg#YQHgnHW#xL;Mv8^TNUTYj z-l3Qn{-2@Zp8R@3z9n6zIp@|07jj)3L;PZfD1-Mq>)7 zZ8$>@;`QX_A!#n1DOOPcE<@Sp2cT9-I;omqe|PpS%)g7m^P}va+UG#AA$X(tJN6Z! zT=prhUk~epGMk8Vct~ITD3@)R&C5Ivn1_yM$;Vo7 zYiM_UPxl4<3o~(@h-LEdXB0QbQfrfBXM=Yz{C8RpN@XTA3&T;Aq5v<8r6||DqF?`4 zR4>3oPl1{}S$(ZOO`ObLp7k95<3S!_qg#KP#ro;qBG4IaSXwE;Zr=|#_Mg7#Q9z*J z%y)0jF^AzxT)?l-Z78q|Ig9LUekN$)aaSmP#-A;H=E`@j_gxU1G8b~Qjw8q~T<$@#Gb{99*_4Q( zZ4rfn<gwX;jdo>-*YWw${vD1E8z9XobNm|VMF^~-spB(k#GvHLD-*?uH1 z_Gv{)izCIgH+vc0ZF1y=ILhpf%dmT7MJvb%fHS~E^Qaa;f} zi4c#_P60yr_T@plt;9>{X8EgKJMz=N-NbwwW;3_fz%`0{emA54OP;ZXLy7CcLO}o; z(usUV?)*{aBrBacB(hF^emv~CtN41+ns@IS?4*Fbbz1K7j}`F5DdKE5U(hl_!z0|? z0_Zy#9(JzS5jfyDED^}v;<@^a|B0>GDh|)BoJReq^)={?{?=AEQt_*wMGQap8-p6% z3cVq8Ds~>JL*;9By@2cA%Hv_Qu1Wjd=S^?)_w8rk%-wVRs7~dbCCd@`ut((O4QCr? z{`#xfCF#A6xxq3gs zd`44xByIO{IO%dab&>v$!dkHTh|wuSjIkYt-;XR^T1fmzU{dFTJ=pr{5d5mcaYqGy zX6Se@kzMG0^T2Uk?@IQI|Bs4y>bE^E=M!P@KpRfd>J3Jw8Nj87A*tj08lnEWY!AYfa*OsZz)k~{)zLYp=x zkJ&nHgntB8jL#mZypU})0Fd|F)pFN*&w5LN_W5#iR-j+_l)VLLph|X3&*)pb5}xfh z#^OUC98lUI6y{47%WD)+n7)5n0OTrKm&{t3e8y18B7B4)3Sjc~9rRM|56F&7(5o>< zB4YIFtAO5oblk+sHo8A(JkLu3l{o@r4k+Ate5ZUsaue~*R|{=3AgMsix7bqq*Ff>Z z@IS*(=I5~%x%c$st6h<+=1kePWgcQ&v5Pk{P$(>`j4?|{8(zl7h^S;1$?=S1-^T?Wxwf1hu$ zbwfjt;HYbBb|uDfEk1CIHWDcWBybQMv{069h7ej1DfpX|xPG6k97AS?xyf#t9yD4~ zMRx}}DB`B~6erwV*zzxNyavFslwLrG4_`q!b_kB?S}OV<(RDoyYsd~&8$}wWO!zv# z5WE)oeKv|(pFd^*zr};}{FpS=m?W+=u%&eKqS;t7;~4>}Ke!XsDtoe?#-VS^-78rZ zHY(z?_Nc+cKi;R@rPB2eFoQ&XuRIxK4qao^<$oqcM(>QNCmf~SJ+mrFui^FibYrJoQ#hJ)W?dtEpJ{G%Q=v9yTb+F3VPzE`VwDcQN3-_iNBC)Jf96lU^18`- z8zQkh#DjNdr@U*BjczkC@7 zphhlyrbnmT5#MtI2_Mk^DYoF{sI{_RFWY^(>D-$M=pJ zHPd-N_-nq;MBKAgv3ajL!Vj^>qQWQzwG?v4@j|#2SZ@|qLT3ru_u&JwF;Vld{%>%L zYy+<@WW$h*?8QdY`xh4T69|RuN*TE0ZJ^vPlQYL1tl6PrZ@=1FWB-A)_p%-*^x2(3 zVc+);vRGr#Or^S$c=5*|aw)3(Tph<@<_cS1d-5lroYo#Yv7xJoOli^fav*M*DUYzd!SSi*I}SV&oem2ufa0b_3;^`X(MUg z#h1@dQ=d-kYU?DEILrpx~_^mkC&kt3b@@Zj^=dODaKSh zT3(yTk}Sy-DM6@2!P*D}#L0w0^ebu#ysZrue~wi7uuL9+UfxxDBqUeA|2zAuY?o6# zGN&GdmVE0|T7qT=v47poi3u?~kUr5M8#}p;|ld>@o~qgvYpDsUSK2C&W!* z4yyVN_y>k^mIciCQ*0Vi&3LmUpCZl&P5@3SGe!46-H&DR4>37aGn_5?iS+LAvS#2+ z3vTTeAbDuDx>GHjG9Vay=ak{R@`sFkKZnB<4{r@NhTl{pG*oZ~P9~NB5ppjBUr#A2 z0EDzvYCzGGy6xIU)>@`WCVk7X_2rsr-3~W8&&q|!XM>CtGb+)vegQYyhsF==_Z;n> zfm{~yTZ=!)OTfL)q>Z<>oc4;H=9$a$$UuJ7@5IdPKM-1P;+`iCjO=Ah4NRRu4|W(W z5krq)jDv*~4<7~5TFdVpOwTOM4)jdzL2c-KTxd^Scm!q0pEzU!xw!ktc3q9RvP?9XaG13Xd=Q>1;~;jhoaz=!(@j!RPHys_<^ z(;>^?wzFEwM~}jH_l*yS4X|I|h%}iVZq0CZRy0B58%G!aG@wdkf7|Nt)nC>K(j!tz z0#ger}R{kHSJ0Dmgx_T{IbnX&0 z*a)t#2=Tl=nWv~Za|OREIWR%;9@#}tMDo!Ao=}yv&iQ-gb!@=VmN=rS7rc=-+_wfG zhEeIOo8J7w|H|Zr=kFY2nm{r(x@ZE2qyt~{Rz*1%%a-?g&`%MYAxz3aI41fjQ#yI6 zlYD2Mna3H9o$O7ykI57k{XzNj2v>qN&Z55b*^Z%R<%jlUk2$HWVgsVT&i-JkKjEZw zr?A;?ttWa&irnK2$RC~^$;7HK-!qqA4m-uR`gE~;D0c>ic;Ut}59@?2wRe`lEmob0 zvD`Zk7p~?1*TZ&hpW8!6Y?+W^!tVXe6uVBkgp;{_2{_xb*2q57GI=XBH!`c5q_QRH zLJ2oyv-zfTC$da%%~rTzF*BR~tFG$X{k}srVXags-v4mohuoLrB(>8iziu!?A2-`B};>PtPoLXjDcpWZ!LwPrV(J5!QAX6Z7A2b z|D#(yY!w8+N7LUUcMQgM$7FQ12-3QPFY2xai30o&v@6p_0nQRqc_e_YhsMg18@QT? zE6&Zh6cd(+lOap0y%qk@Zg!7v5qbK|Z6o8^dr(Lp1AaCq7O>baz7@uR&XFIYzvelK zjm&>fTP@PP6*@86>g#v)kh%X8WQWe{635P1V7gl;OPgoZK7|_(%;R|(%_EW7o33n~ z&2A6YZ6A;*z{Z*t8VLO=>0qxWJa6HW9M+Gz8Yo?h;_P{Gr39o<{NKw}@q4>jZrZ*E zH21)6kS$ztH}y4cwi=~3CPKi0d8~bSu|DOVF)~tfae-P+TxpUFQxMrTCbTOwMd>CK z{!Dd)HvRmS&PreQsFa&;JN=WWsOXo%XBB~j%CyQfpAW#l%u=UMdT+HTj$&C6xnyjC z2RpPJ;?Sj?@oe8%z+_9$yX0)!z5!PBc>veD$n**K;hFaKi(!hUcy3|5kAP!4gH8H| zJ5F;z%t6v4EFxb^+hKr$V4zFwDptaI;&<y^cFqrww#DCU@g4YP za=mR z&P}_L5p-F7pr;^mWh?yqLq0(*6?k}%St+=oFv&6L93K-2j{bwoZ*`G68cJcD;Em71 z8`*Yil{M~1@bP}HXzpsof%9+)a&)>Twh8gxc=?|*s?j&UMbL!%KqozerjHlP(=)e; z>nB6HddfL%XZ}$bY3{bpApRTwca9%Am|e&~g6>M8s;Rd* z=?9n9dbUJNNx2VWuReb0E9^c|p|#AuFH}+mvh%^;M2o0sKdau8L*oUj-Ob9e7Yi@7 z{tfj+*clcRt2HopNElT9i6+Z{Fc6XE@8?SIbFi1ta&bVOn{&FbWdb8MHX`oZ;8(o7 zDc`kH4Wr32B8nmdLJ^D&?M>nq7hkDq9yc}+X6ZSf?u;3bM!}Rv9@&5XY8Q~A-P+lp zx#{hgnMUk>Wyeb0tJ(?~*>hw;`?vP4#Fc>}pDotgEX zc6Wm7(z$u5;y-Cl!LRdc{F|4z@?EhLGPYLRGgYR~9pG}D3e)&IFcm%d*WcTG6U?Ar zo03`Z?@Ne?(0`#0NX3?RmfD1%M%`hm>0{*f%w`Zt&}IN3;Vh00Wr&kJ7m3_1n4-T@ z5vM(*Z3I8pq&`N{TfR{T=hjaew?Vy9XsyyK`t_nfb_NkSR^bieJ7uBqUhwOje0xD8 zcN*({POEZ}99cUKJ4QqWxYthjAmv10vg^eG7xmb&Y?C5t?e)-FN#!C=;dT6!h4HEh zpZ#KLvK)Dw7hY|=XEIxqL}q;o9uBgTGDtr^D7~FfXtgffHrjW8!%w%4(RgO?sM%PwJszEje$S~JMvoY-!x_2rp91jCK6zpew$;xr6YRVd_K zrgo&f1ZOF$JqmTVHE&C|*F~8V?pDYfO{Mb_CyIP_s&8}^@|YS9#XEgNYj+E`j93_m z-woHDtjj0Jx?tMZR({RoV@BbkvC4LbCIB_6TU2`@92QY7oTW#7am+Njf!`UZanc5{ zc)HRlU?t6a6<@RPxm^tj-z={s+GN7-{)yc-_V8nf-ZJY>Jgb3uOzGfnIfS2lLHss6 zL_dERQN0k_5Ve4uEJ@z2gCz2DuNokh!|%(^W(p;f{2`w0=6#=F8X4tYt8547)mw51 z_CyO-RODaF(kG)feA^wvpQ2>^QQk^3i8p4GnV4}mfO*HvSJZHtbI8JM8r1b9#8L9p zTJ+TP_C2>725iL1>y>rJlZ^47W>dD5Ren_{Hkb}B?X9b8fOsDu6?Mi?+wz!T_I>GT z(H{y{Wha9tIt<8*6GS|i024X_UJ`0Ed&4a!N6gXEeNOVHx6@JiPFF;5LCW~aWuN9q za5agH-b-)Y{X{o{ESNPrWCEm-(>sGVm4NBrE`KZAYiM1e?@ZCy!mwF~pp(#WLqPIm zGkej>Cr8sQfVH-9cmg`u{YqOb2&{2aO^*T9P z<;Hdr4oXs%GTUs}QBRjIP$S3%iu=$hcMe}00)Yayc2&Q0_{PU?KCy`s2>;){svg29 zHU}i_{SjZU@h=I;dZhi6juSVyQm~tbpq^jv58n{Jh4V&n=A$O=%Ba^*eaT-+qM1Cu z&Qebd*uFE>h4E_QB(I0XxwTQMLVo&q`ZJ}PHQZv{tPZ^>rre+G_FdV21qM_y#Jf zj|Hu-F;bzZapTBgiF$N4cGMoOLWZN9!u?fNL=|PG4UcCg2*gV(2F#C)i-hYvnJBu0 za`i+OskL5`v#PIW4Nwxsv5szpze`v@xx6^zT;HLluTfLT$CUbJ+bE=V=irg3NZlQZ zHOrCjan1NZCWOx*Q{M)N{QG_6tX)*@q%b1TkJ+(}gp0(M%uJ^a!t{qN*_3og*S026 zw@ah;#tV_R-Kmao9f>F3%v3+{LT|Hh=XK0YwZCnE!AHOQom+UD%rurmr;WZ^2dzHv zw$F||)LAh7?@a2t^>eA}-b3S$LXAek=vQN##I+W$#Ge@#y?qoJn(u9wi%wzY^2LumnlP+QW8O;o2{|I8bAY@#A%)7+~hoYzAz;MQfK_f~=zbUXL2(SaV;P@(GW%IVGh;8&z)jvrqg!wta) zr9RfzPyG}O_q@I16f-Q76x8aC`xXC<<)a;`*#q=-a4-HX(d2uDwlG3FZ$#-1aS1ZN z@~0c$=GRJFBQ@QO2i_P({#O4dfz<9u{4!*eNf0ixNIvx>7)d7#QDEh9Oq6!hs6Jl| z%n>@&SbKWv3p<(p5$HHYBb%^%5LJBrrYPAD)?%4ke7)anV}S+=DQ$Vtkei#=RC&R~ z?Mz_w5=;%!UXj%qfe-LEesk1K&>3m^k+{dyfVmj=0@uRz-^2!QJfu9(cm4UJX}?)s z_@-_7)@60kf4`Nh{ef;#WtnCeY7|M&iCAc)=j>U;3!+&kxocHgNw#uyU@&=dh*$KP zl&EA6O(fNa=nD=9F=8Twk zaHhr1Hb;@Y^z#8M!%6W-dmwvE)AM5F>xZD;DRc6%&o^zYMep`}gTyX;3&e)s7ZF2& zkOE{I(V6rWwJh43RX>tfzr-%9wG}?JjRd<_WhPa56x8fWC5zP7)^ViIIiZvn~O4v8n6nqr5VzuieZj`%=wtWf;U8jKI z@a|tShg&B?#*RABBJ)HMWETre&h{_6bapnInARJ2J^0g^<88k;CmbFsbGoMh~NMkCZ*NfrzRdcS9<}k5&xw zrjglZi9 z57}BRL~mN6YO34fjoi)>6|}UR76t@{$WauPR?GQ%Dz@j~vBmI#xN2$HSoTx&Qk8h1 z4{qw%@bvs=#F=1QAcvX@UTMisVTlQ7$F+CNET!6#hjWKc1Ms@Q>f;ZZJgopR% zC9YN}@vna+%=r*uD0_{Lr$lIC%oubL*b&CKH2#ILyvmmDI?#K8B_k`1MoZV%5`@lI zQY@2x5mWrAg#UTSAnZG2YHo7q*ubl2&uNjKFg&^;Ahs(UxTUl}Zx3dm+?`9ltRNvpvuc!=Cg6=uR4R40mg7q4z)ym{!=&1s~ zfDPVv-q&|tX|Za>+GCSQbF(h}T)M2H{trMmrcM^_IQVf$)2EITWJXHR6iKk=hWXLJ zz7@hOB`TepmCW`a=_+@dPRs!k^eQyGIhli8X92AzneDn)GHMBNhm<(sQ$G=J?6X?|}J#SHQ@n5!^c$Z!M+Qy=Pc-Nx5Z z;fP%pB>6rd{;%dr!6R=bc+;aIPkC9)OEcbkgQ4)m;dhs5uH3sTc*q_2k=^5k7w!Cv z=laQFwYB?Pp+jVwPD32Fu_%K50%tQdT1!)dDi8dhH+)T4lU9}Vuc}L}><4II8STU> z4#}|r$**;UNgZ=7Blgx3MSe~~K#Mf3$%t@cTAOAenMpqz!{J|9T9+t*I4VZ^L!}L> ztJ`>6!uIax_z_%={&FqleUVkGZ2RaiP}iA4H3u(>mIUdYjydL6n5w!*Rq*=q{s>?i zG+dd9P0%a1_W!R=x$b=aEd46BQ~F!78xT6;eH*ZKMMp|Wq5W#@IbTYsz=@B)sJ>)c zFA3SlsjgPWVTz}W{Hey_Z^B@At7bL(^V{DkRHVNIjGyru>s0M1h zC-BR^GLaQ=iIN>#>9R4AAYfuq7E{8%(0y+K%u?>jtOGlFde zKa8zt4^uQHA7_TzJxgaM=5;N1A(j(iXf!HT2vYV~fEe6V3sHW+cH=?N47KK+uy}og z-(VQ>4gTz$&ml_8AS7;sv?iv!jELi+vCj+x_Am?O)kVs~92I7#{gKNLbl0NJYTl>6 zeUyg(C@;J;tW{dXLAbb>6b0Sm2rbCojhke(>fG^sGZv)CqNEr8J=`R>AH?{@S z27%duC_y4hsHzK7bXUznkD_8wrB?(+@aLNVW;}Q)iRewz(xV=E;@EQ&?gL0xiT%%U z%z0Xu!&4pM7L5=QFUv^YXu3~=KcR?YU+j|C;Y8@5Bys|NHe-P8KMU`NIxxu9QmC&% z^0YkVeO$#J|Au~7xGk-A^FQi9je(Jrr$N=MM#v_7LCIR^)JFJp$uf0_dcs#*ud3$P zZJjSv0X@X}VoRfnZ8dE<{+6iu78udFljP%dN{FAqjR7gPF&G0iK6}MoSi4LW~E&eXYir$xtdSxQkIZ9$Hn~VpVTZ~Jh z&wG@mez>&)64wUnzXI!y9KJb9p7iv=Efxxj^uxij6&4|C+Rh^M;$*MH)8#D2DFvKN-m2;5X zRVU@A*FSga#V7PQIzAPpy5$)+Yfoz*WdhA#X|)-yv!cnVrCg9>6!e z%2@dhY7}wSi-H(+5Uc>77P16p9dKHo7!B^9zkIbH#62Df9RJe-2ncX&W>R!WBqtti zc#pCiC?Rh!EzpbFrFPOun{J!ZL^AQ z+`rZ6>>Qc3YRfJ!->W`0ZSzCdNSCJUJt%{~jIwEs*IJBc%m>Dv`V>by?T>DE$Xfqr3~?h~Y3 z#G=Th@I#-HaYQ#AGrp!!H{Q8e`D63P0}>+Bx0ldq?>fKwf3U#$vFFO@r#V;)B1aI& zO!ZhP!p1D;bW)c<#;L#PiM@FkTl1*rg!V?~SWWj&qc~O)B##3cE{btndkc3imtQ;o zipAO;PG)mU5H(A2guUkUjNSf#J*vQBSw)VX$&&M5UvHnbN}uU(^Yp3^`d+ZmD$l6f z0P~;1H}N9!JN(G&6}G4^Abt5_rFYbAF#aXpI9_3$N3ozwCw< zw7Be6G%NOjZ^c}MLME9<*qglx4HK;x7N{FvJI%PZ$!>KIgwRf5)XFBpKGRM$#8MVe z0?6*946$S$mA;kzO&q$=F5PO1#jf7D{C~8xcn*emC(GG`@*3{QDvgZ*6i?;{D9pyX zHdF=?k0(37ERX<^EWBJ+Y^sli`%{^veC_j_Jf!!kw%SeV(#oTK=6upsXf*3=CRKM8T$evyb=K2UcQ~vvB`4(nhUPG%@t4c{67@85sAokGZ8WF)`av=F#@}R zEd$Mx{2#W}kFx?7LAQuQ-nf@N>(nNsIX>t4R`O<1_&R|Hmb|;0tvK(k3DP|Oc57^@fey9?J-0ju(HnFVk2ALbZrCCc_PnTfC5vLG zc7l_{$L~ZHIfnf$MQK9P)g~mQ zBj2-G9C)xDe!mtG8Gy@7!->mVqb;2<_<=;fWrj}fvfmb?>^K_em<*~_T#*%QuzL%9A{JED$HmAc$CTaL&x1pm$x17kc*8_`bZ;QJ8|^OT zR+K*~y^)h(opMnl;kS@lsMn`9A#Qvc%!ZGmsgNX9@AyV#yC%GLr>XXMJ&u^#m=p>| z>~I1N(n*P*e(tmS;r+{h0mybwbTGgThW2H|Bu5=h|J0R262 zI>-?K2=m_*G`(!Y34X%7^8%?cXo$3~13eud(8~$JIWOHSy&DySyB^ z>z>gj)tKIqt|pr@I3J{NOS=ZTEcN??ot5zDT?1!6FrJ&XieK2PUw2{SzQQRT$@gpA zrux-wcf3VX@V|)47S>T;-0F}?;;-c$QK zyRDI%6Yzi6>aa;fB&VT-^q0fQA|oZpMjTweJQv)YhUR z41d*nG(e-m{iI&=b9k1@zbF}6t^lqRSwV(l_tgSQf7K!!rfar*{eZ2s>A9IHpWV%% zt^R7Ti^P-BVSV3{OI9V;9y)|z_DC}nDt5UubAb=4@a zIkR`?y@XpBS~0-8zAh02x0)96U+DsJhZ|kNBjOIY{^HxrEBB-%Xx{QNg$Q+wlFNbd z_EEZu+xTbQjCP^hO+wtyr`}qjfZ@F^B}pna2cd1Qr(rSR=Arr{w%(hbx#$M*A=n+L zPPQ_-^))#2&FGKoNZW?n!}E3pugxT`p(f^JWhlG~^d+>O)$BdijH?n&UN0ZD|6q*P zt7{l?v-Xk)A8dAOOIMpyKkl#c{;?{^4Un>>Xl$Ns>!=v z0wd@TGuN#lKHnwO_-iAYu?1j`kN-c+0U;_rw$x;J37(L@B|2(}+Ne~|42oqE`#}zn z({z@qqS5P?uOyy8+`gE*1$Bfk?rG^-FeqX;WNrDysa6d(>a{sr3+go`;QjPhzn8<>RZgs3jK@K;@B7im1Zw4rgNi$trsYq9odM3 za2>;gC4rQUpm2>WK4pK_)?}8GR`xJ~Il-|N*N=r)WcGs3fGYLE4z~ueG{=8hmQILx3i?_>v=W4-B5Jam8uG#POua9$U#|*cz z`ugsp#LJsW*T^PI5+=KXTZD!h0WCq!Pzkd0X z5nXy~Xhzis!2XByM$gX6tF`!@`FTKj?)rU?mu}@EaPfK17TAA<@o8Zxt-VPw4bj^a zn`tD$Rk_6+=QY>d5>?|~!_5eGpAvQkQrET>+2)pxmo~Zn%C#7+MesmPojKv=TBreE zU!mS{oO3RUt^jnWk~4)Mn$V%NmOYsViizEx#o@FIPV(lu&9<)%kaUhyjwDc3K>XR% z{>|B$E+@BUNBZE5RhShZLR8_zr5qFzeIoAkpT8sh4N1CxY8g}eAJG83!!p1$F`pXLKE!35b;K!+9^4udL5wV z8R24@AqV;{NueNFMikO$UU2%FbjIzg_J2QgPY6(;V2?1Hkub*?tP&TAreHwR2)6FS z;2_b3z9sqWEAQD>l$nb=+#8RgFECh=R$Bt;ZlxdpMz^*!yP*ir5AYbiJM^6?%l6SH zAQ));&ETCj&@882RrVR~*mJy{T9vJ908!p&rBipd8A%PuP!uHbRt+G^eu#`1?2p@U zx0^Tax2igfeLAT(gAHcY5CtJ@ZF4`hg64FnVFa37B#Qn${kZkscyRVZw7G%Z6)`Zp z6pTW(RZfZc;za)lC7!7UHIqIASv14RrqN_Y`}&oDmr}dBufXeeJwusN{z>oz_>fJQ zdx%c%h}m(6glQPxCLMF0HYmwZ%50t_J5W-72p4b_D!0s@BG#I+8&PV;>D4E05Ww_T zIQE%7jH`H;UZ4=-dfyR!lWBzg{P+WJhWZ+2L;~bLBSt4SuZb!Uu#)|^;+Icx3#~)G zfPa4=0D7J;w~0;n^$*uF0Sb8T`fPWomM-C)vM};vl1T1+?ohFzpy;X|JLq@?a-Wu=lM{Y>(6$b=FYu=lG}q-{O6s|4K45#@ zi4M!H^g7JJ@$*XJjbGI_vyFVk`KCj4;9Aj;^ialqrK?Kf!;Y~^BCm{}EGOUj&_wvz zF&_ZLzq|cTGLKrQmO?|ue%Uurma*DI(n?h?_;)`&@fv<;8|ZZ7Ol%fNC$6=*Hg?Mjpl%d^Ta2!hWO@i7ao`B1;*r9z9wc2lq*OF{Vb4bdX zQbKMT6nCnPGsWV&KMn|=35enhZglZ*tUsd#w0?8fTNi`INDN%AX5Fh9yma;1Jy&d0 z-M;<{*67W`+07(#A^(FBM1(zvHH+-N#OQOWPdwirzpJdUHHdY7Q9jQJD&uhM)EzUT z)KRn+8f%6|c8rVwX{CyGlcs}nL+A&%+uD>ItkZSU>YoMv+buJe@o){UU0}d#i)Vv^ zhi50)-!aM2<9hZ<()l&oq4exTP4Q;)egLv1{HpjiNy4;&FMR?dd#4RxNNti!L0>i$ zWP_JSf0kD;`EA2$dZir0`kEM(%&TLjHf4{!A4XKRKXnq?C9SP;TaASsD*TXYX&E_x zi#<6gS?s7$wJVnM+@m6@sf94jO9m7Eq#7VOpzIGK=#-NGnnVs z+>s?GE?nMah5w{Wz}{6-?p(`jI>!SEHaoasaKl*kT9%%T(13zqfc>LEAzFK8!kIME zJ7q!Z_cY)XzoiUE7ZJXU$ekWcGvn+sNJrU7k9ZHq&K5T`=>zK`KGff{jD(m*JyqF}&Eu;~#8 zy6M*CVk*$qmfL+&r7PSE8Tr}aD)L1ZIPTW>98pq5uRYzQcQu2zn`F1B4|HAkW65OO z`0i{Zj7*q5`lzkwQw?O1wGuXA$}|N1`W{si^aS+s=vZ{Bsi-b)iW=<%2iB7|GN`Wli!mc^E3ecQ(Du!iD{YQ#O z57e>C@>`y3qo0k5GjB3kJxVLntVp(UC=H){t+5F(_N-Omr7*(1a9KNUX{jEscj4Z4 zI*Vs1`mQ}gMzEWTa%uFKiqL%|UXe%IM{0U6gC0_T5-3=I?uG(gDbw5T{ATO@Q+$Aq zKdLvD4F5gQnwLkYDb(<*5Kp;M=QsB7dh027qE-DADVQx(M=GG*Q+{Fi@)_q5uIVDa8N`C8zdw zKAFyfHDbvw$kV{|A?#J2_v9#*$EIb`pYBKHQgg{dK*)XB;^XCjhh>>x$N2Yt^&bSZ2v>|c6ZdEYYn%pf7{`5Kvq#1{|vh~aB;*$w4?&p{r6&75s$?N9k zUOx?+#eY>vm3e+Lk9-u}HeyInH|#_-6GwkE{+pkzcp~EBtN}4Ygn2ZmPZ~>(dQa@Q z*TC~@ST^sM6SM3t(1B}3M znsn|$`;CAEl9&cAYY~D8Rr&m<=b*v~l5_2dhoQ;O9VZ8$JFR;Uh?Z(;UfqRRaPc$+ zM9{p4fMpI9q*-g=FEjPDCd!YRHL8SNzi4Yr)TDt^e}Wp4&G$#|U*9`}u~~xN*qD7) z?=QOkxlSI(!KpP5ZkSpmMqUKTHwq&{n@DNbHaY=w!^mB74 zY(4@_x<5l)3Up*e5DYtoiiJS?0|Y|QQ5r@Mb>O{*QZ^*G>&nJqU`U+r3NDCqS3Y?C zFuD>SqG1D^r_*2GJB3JJ3e&pMey#@lN@zVNwrAXZ8kqPt>SAA8^}+=U&&ioIZ!h+U zB4%g&1y(YP>G+`GZg84<&Gq-;69|AYPHfGNjJq^KC+`(PDn!xv?^!6P61b4)JvLT- zNbEQ%4Xge3`m{}#X6=|K^wzJM0Ca_u*u0Pe5P`lJ1HQ<5^qzy5fpWjBj~bv{?l8og zKRxLbwBr6Ji!Ef)$85xudlc|KWaE;Z*4I0AqHXlK<1qz9u=>F9H`9RHpmo$a0;`lt z%;dQ6x?i9Ola~olThGiyAUV7cfWiR!hP3PCN`6F>5**Xx1klSsS1hra?XA&93pzQ%3@oEp`MVtSaweTYhIq=d5%+jyZT2O zIQxu^6_?uZbvpFCk-(mfXhjseD+aI5=DpXv!y@Nd#T(?NqoSAEk<|S&`|;9UnBH7| zIg!F7DS^o3neyl#E| zt~)80PyM-5U+`?-l68i&+H*>tYV=wwRDhem6%5YrxShsh^iO6L`>iz3*-{tmVw_KH+!>Wx1EfWCoRiu?qS zI@8 z^pA^+1*<8a9B5W7L@T~c&pWTd`$8FDO9Y_KQ+r&W#!m2k+{YWl^j;GuG%N4^b;e(k zJ`=glxa1H@Y}NMO4sLd{{XUWb9~0x6tP7Af8Yc#_?^wgzeoVncIN}KT;8 z*CME`S_j$S<~V?&{tuA{B$GEx-*<4(yy0eRyqa~zs8^oO?e(HcRlBIw;td1yYwc=d zLDRz>_CG#a+UAQ^)NZstjtFvUG959#n$0Ttm85PjRmzd(%H^=P=^AE_-I+4Uw;)xp z1`{UI$PWceb*vhureQVr@NE}i_KGj>W_gHNnNvr-;Y=f*il2RV4l}d%7ZOB6SaW^+ zZd#WoxA;Eimh7JBsB=X&v4#HcaetbL)F|!_1R!q%NBF~t5Zf?BjVcCxM>YGd#utiy z7|04m8Tw(WSZ1j&2Ajf*%@e5S@IU7Ioo!8;R>v+RQAuBHv-B=7IhB-1=vG4d>nP*6 zA}DGu5NsD~0r_>xz9=u8(&U#ju{`@EmV=R|I&>HJ2?R#}xAmjawo$on;rrb5WoeV! z{pOlON&?7^)~kg7$JAFwMcI9C(;Z4Tf`l}Jbcv`mDBU3~HFOURib!{(gmiZ^baxFk zq;yI%ytj|~`@d`P0oDTMoZZ*8_c^DfwGA%>t=Q+VLn*JEu@hPGAYI}XIsL>!ld5-X z7k_Sa*!I!SE3grhw^QY?3&3!+b`(OMHiH}tp;698;nigFY99J>8+{c!5C0_+dPg;& zE-oUdTr+ybWsUlN)&_fVA4T5p&M7%vJC?#kHvQ}ELDp=)&jG^x+V0cHHq(5LvEE;m zSjhu#tv}D~2UhA>+ec>_%cg#>N&kcw*lMMruR4pg7iQ$u!06o0>LRzhe;Y^ECmVzc zwN2c(p?7y`VJ!Kbe;8iytlLP9!gcyS1tXGE+fGqgcU%kzCxxIE&-|MOn8LQBF?U!z zER;IBtZ!fUPe~Zrkkjm3bhY~cv@k@onb}v62QOc}LG~_R8VMVUIJ$w$lzn}#WkMNE za!@{C@5gt$fBC&pvhMYl)X5K776ib}Zyp5+$DeWQP>87vkv_UHHaB#v>G^3>7JJH! z(Ej6w-t*M}oQ6?nnb8y%dx7IM0#uA_rv^nvkvDwLsth&Yc!HJeQoir@Ge_7_(^cPk zTPsNqoSrIR<eHsog;Ay7GKw&CCIcph3$^UrDc(K|EX3Db zuO27@jEx}`?krBNY2W_WcPk4XzBYp4ef|J{Ft^fv3vB``frYElR~IB8$}2z)y4vJB zZkaXST?ejYzYMSPaAvGBiJerX?cngOLyU0I(Q>xM}G$@9CkT9 zG9D@ePAa%EnMd?SV7YtfZ;Nr2_^Su^`nILrrx|gRiC&ofXF{1ux2=p*zyr*8#FU@O zJh{eI!69tI98;6RWhkiwmKiP_@U`508->gj0#2^tAc+<525Q;w1TT}gc4oEM1`OH( zRg4M2CuPO1>3Zy&#Ry(kG$m)HANi;+%e@)lvrPVN#PllJxkOX~r4DUfeCPh}l#jwE zlK%|sY-jH>&AG+RSfGE2tgiZqw~gOksn2ckR8Q#m=jSwyOtG?pgR7q3sPFOh3&7tC z{X-yYqcUac161G{CCvfK{gsZ*M|S9y1jV?}o$~KgI^LnJB$RkN4v$LPwlZhWGYx;M zVg!Skhul80pg#6?eS{40@c5nb&fPj*Z@SZCB?bPb%XX*GnslIEc!x`Ku~1I+bNVtC za=ieX-yE~2(i3|u8Z8ZWRu>!M2u>#sZ53~(TpaJ7`z=1lj88*MqIT^pv@O=_B*Aa;OcqM+J|Ki6kS#a zM%1h?z`89{_3UTy<5a{r? zU~~iy#-~L*Xn%xk;zBU1{RL9W!F8)a%#VtfUl~2TI_6u=QEr!|{JJh2;aEJ%{RbNK zkv}emezl+ej#9+GM&r&^I+YEQ;mOaa9p;*7gj+4LAfM#msPSwQVb=G-^f+HD|;H(|(%BT0HGAagaSHx|@CDiJ+|IYm5v z499Pu^&Sh-7mNrDj8_Qm?pmv!U4Lx>I{+sGXDwzPXa3Q@uR1Ard{ypXv(73w7+ZO;^EMQ zuvMN>BTLTd;!<8@E}X2>A7mmoS5nYCtWHI6ZHxa=F)-LLa~L{1+bNO?vnGA1hw?hq ze{iSS+=Y&P4vpMlY)j%)Ydb)L)@CC5^?wGKgeeAV-}$wPTT3Ui@%n$`f$9eMkz7GZ zpsOt+Ekl$QA7Z!zGjO;{M`5e_cGc}j_nXDc%~Oe|WYvY~%p}@o zz~w!4kpcD!Ar+CG#bq6S3YJ!ZD;x-AlmOq$yVdax$yx}YhL68n=|>tuaSXj^fMaSh zT#I7MJ$9DCy;~6Ly(dGcm-;A%RMt&AnQ)AY*|`r*jgP^OjKG8e$H9dG_&($7v;gsh zuuj;@FZ?+mWYYL!wyZKw+9qz>leX8YkS!sDose@fl1Vmx@6jTjpSHPTd97+q7>e`a zZ15N;S?}D>J)7)Cn4s+Eo1e=8;`c7EyI3q{)ijYqk6WcOE~3G#~J4o1=^9~inE z>*%_ zD)oCk-mVW?nfS|4B)6}D_6kDOnR#i}|E4;=%Y6;DM$>g%kDso6bl+pzr{uS$Q}jBy zg$8`VpVQmXLdagR?$}{+1ikc`^#9J_gutKp3Yb&-g)8$pq!P{g%}MujAQxSoILpVW z@c~Er*s~|Z9)r)sjyuACq@2RX)Ep*+|l$^uQYy~>wi4Jip zaxA%1mf$))FI)Ry3%tHad%e6nBTHAI;$;qhWjCTc(!odVhwf#hB5q?BL((-FmV2|shA)2$ zQ=dGS7TrA`8=%Vl^QoBHwTpVU`tKgarGE5dr`^`cxJdo(IEU`FO| zpe-Lo4?K;!?Dj~@?9b&jqBs?-=6Xs0Yd`|~_j(J?)EzLEg{2F%4t>Z!$X@lvzterD zKH|H?B5~m$Y?^8;le!dII{?R%(mBcFJ+;pl;;FTj$6lf>iJle0X?UA%fRx~J>Qrq@ zCMW46AzH0iYsQZ0pb%P3J#yOTVrXZyA^fgDQ=ZM~KiR~otXJ9;yq(v=pB)bHNk864 zY_J+Wld=`xw@XCGFVzjeFOx@#rIN6*k2cr}#4MO2r+C^|Zli5z;raY-knebAo}lve z+UcFHd58X}JnC@g$A~@9VtN14(Go&6u#2HQ2&2-{ zdumAFeXVnKy9t^PT5lr-cGL9hZMM(5R-?ID#PJ|eT9Eu4q5Qx~uJKRGfWRf5x;C3Y zOppATM12-OO1rNfE6aADNplAJw!AGYuX{1bH#fxdGfXB+l`3Yh*z|2c5#9~$`N2%Y`~GozRJTJ}i)Bv0mL;APYj7ShByv_pT}A#uCii`WAyNU9Ht367 zuJp}0LA@8@VjHUGx8v@j-cp+1?iklN_N!;Lb(lbpOlI@4n5Q78A6v$2@s|r|@Kr-b z7!wSi>y?{A>12$RJH#2&ibO*;c$Bb-!LPwA8|9@C_^O*XYBTr(vB6b@IFHV0VH{0D zpIO4xQFyiTb9ok4>#d-k7_nUnKE6!?f7`Uj_ueFJrfrW~DUb(;9^d`kIu0W&+IFJw za^}lss8Y%OFTOx`Xi9Z&1Iwoc|Re91m^ z!m|y&p2reSY5Hh&ZIUyk&wGF3uX1MzliH=R8Gq>w!n}TJtklOwH?oM;aDt}wj-}%r z5672zB~~h{2iNLg^;6WB3o%)FOv*iaY8=}W!q3{0aJ;fvHAnWAzP!~OySve7NOl$8 z2x%-(hWl(1CEK?@?S0ry-FPc9%Vo0iLX$P&n=Iy+y!16vwEy%^8n)%@`7&mn>u8+JyVNwww12zPR7zMm})&_ z9#STal*846_yIF{R?FMYirD+-&BX*J!7)n2+4rX|@JVjz|4fsGkF$-^JT3x$yO#14 zegT|jaj(4Rp7p)k#+9;L<|-h+z3!oDC@>UqVPIe#jqdG#Hk{Bqu9p||G8QY+r}W~7 zZQ^XiT@wR)WQ77tOfMY`=?1E@UB;h%^R(#}rbL=UPa)a*wvH|CKUf!DNC%{U5BA}< z2)CXhHwnkD1h3PXndk}7^c(jH$Do?%t#hQmI6Ycy?*pC+*5jR67Y1uNe;N$xm)29& zpk_XQPl|{8H#{{Wh*eUzUL=k~6+#!E(SH1jHt}|CfaSPmPidvXw-pau_nsAm*N@-c z*8HB;EaIYtd9`$Vm9{i!z@al$2IuE8?F_(Tb3XLAfV$%*op4;h+&0i! z<>u5s7Frfzn_Hp!yqp76|6I=i$0TPZ!B%%}hpsQD9b{C0M;76&4Ok0kK4597< zg)fZ`*4o;LAm$*VhroKcN4}nwb6|@Qql!4y=70MWj)glcBKl@Z}CUlYDw+p%i}@Rsf`HgrP!J$`4nGD`baUyf-#2(bgn?om;f-z4S@Y z$lR?{j?;Rn%76M#zf|EE}EtV^u&89 zy!|F7T^h=d@|tHu+F-#jVhsYue!TimCq7qW;n`ZE0y+Z z>9?Q9MV#$>z#taW5GB#1Hlp=mWvL$_U58$uOW@MQ9ZYxfZ4ve-wniCu0aC84Z#Q=A z2|aF7zh`ob5&71VLo(eaOwu_m#Kr&ULM}aa*UR+r?9|>5P(Cjbmw>!iea17JkHS#i zzrRp0sSNpB5fC9n9tO4T`(+=dy*0bveXo@`51S+F|y6jey|Ht=8SIu-#>O=`CwI+_itSU|LTBUr0GR` z^#&D|br;F^32K7~FU~vS=rJt=?4FIp3?%;~LzIh9UPw4N2r2?&W!@0JxRlL0%RmLK zkYK*2xG}a9O2WGuA}+7P=DZefz7+r&38u-KG3+~}JjI9jH3@V~OZdx!pAhp=KbFZ+ zKJZpV-$2dDh3@mXLtbFUdxo$D1Q^tRbInot8~Jlbh$*(7{Z|LO__N{;Qt*+>)A&d| zMU?g6-#_qkev6cLA&KEdw@PF31o(CP@`<#e?e34%2=C?MbYEHDjbt`UKu#gzjp?C}g{g3Nu~ljjT+eKY^9@ zHgj^qYL9=lD|7-$6HW#{bgOh7am$RWwfXB5F11#veE%&km-C(GOsBvD*68eD$_tSN zBc)_fw{`Zb3&KhRB?dbGfmBZ6+HQ*Q;y3FK0nj*U@Jm)FQ6;O2i@j}F`Wf9uusfE< zQT$7${n%g5td+T_x{924F0*}e!IA|(ScU?Yld83#Qw-~AtYz353L)rq{nw>ST=B9E zh*zP5uyuLUwk7Jyyir9bQ!%xmPFzW7_*?IQ8f(c0;wC?7_I%a>xcNl+m3qJsFr>rsTsvGYjfn|Llk$4+lJipwZHS|CvfKl{ZdG)j2T#T!v7 zeL(9}?xxI(ZR!D8soQe$)v4Q^$k3c6=o`if;Ms_vZ%^2Z;~dVAKn~L_c|_E{86k9ZWBFXP zm(I^dL-6%@;Nt%j#blNA*9(PNr~{Ad#KxusJiQb%)TXF7l0)pp@V>SHrLRTa0Asp; zB1LZS!nn9MOOSWjJ=MQOI`aa_bM%7Yzn`bBM=5scrfV@pgg%j%b|y!9}Jtc=jXOX(yJSkt1IT<0(lThUJo#R;VIEN1_xCpT_QVawF9*@gFdLX+tUlO;##}oH)k+FSB#YqkmXSa}Y3I#0Y>JIu_&bMUK&GN{XKqD=?1=AF zD3SgP5Eie^v!bu^GC%yHZWp^o8v;%L;O>>fA%I>#l4_!DPv(t2CN>ny?@a3pq5aUi z078*>AQ|ouHAspbc;suuds3q7kPv5NK-g0(B+yBv@;JQ3?d9c+=J_eRQTT}EBShhd zrG1oABr+reZLsq|+RN$Vbu#Ga&|fWhidCd*cTsC=MU$jW&#oqGIxIlaob9RaeOtad zuaGgG`@!%C^sX@Pq=SVD{58-teJOc96VgCHN$#Bu+*3lHx5bghTM7tgUB*g{CoF5q zJ{MOaf_m?2aQ^wqc8OY?!X+nc*N-Pu;Xyixz^%eO(Z>6YQxTpUetysVo#w} zFzFlaoTfIbG?8xd&^d4%RPjN-S3H`AeyM_dLW)^5#8}uNAG_i^$M?)nHOS1fSwl*A zMlRt_ZKj^>BWY7w`OyAZ;(z(uJpuP~_1$IlSF8RT;gdMg7_0e&ejHls`tJd@gDHZc z8Ojz!s*NL6tVHFSIt>vDcFIrH;5 zzF4Nr*R+*_Fs4)z1+=%B>qRwn$a&!F_%`w60Q_atSi4Z)#-sCL`Ty2Z zfE}&zH&Ev)>1d*eA6s9+p+<5i6{ECR>^SQiy*4|cW%sDHeDdYb>1f592pXRr2QtG- zFJC#-2GO_q(A2(wFegA_n_&LKV|*C%;#xwu@Er=w7p`@Kt$P=p@300cVIlL!%krB^ z=uNOMm;Q*}N4D?87su^Y3GX0FpcQF40dAh&=_cTq3@q1I{N!4TpK3oKvotvW(jS6I ztBYozjt#DBmTq}}we`Kcf~M66Sx*?&wN6vQj5WF+>Lr1cJAZsF(cwh`Ay!oahijgC zq!;JozuZIEhc8r6a~KS+v;N6M;uC+7Ndb18nY^ItETcMSxABiY#5zLP8riYOiUUp_ zl0Sxmx5R(a1}J_VqYl>IBxpRx?{`-U4dUDsdPjy7iWulHH;Gp@*kMH@5}8>NoQ-m~ z19=339O5MpHp^)>k+xoNdtbhtTV{oIdyz=#3y9WGwz~7Nm->%j>{A-lZ%mDCjY|VS#o#lhD>&1X0q~Gw09ka~?PsOVK%xBf9|8|u}dij!+(%70X z&LUDmLm0W_er%38UQP&{q=%uDk0M!e?`U@rcseNr+{-oWQs} zJH_V2fjd~C^o_dlFHB+kzY<{gtL!hCUcVq*anfd|>>y4F1LUPZ?kc?tC*f6}L^-1g z;$S|n9LHRGbnqoo@e2Nz!Yq2y46!G4qqkh~a&azRFagTdh|37-EgYuJFZb?Po#I+r zd@2ZE{FxepZa!F7+|b zVt{JQAUBAJ60f}(3zJMK6i%mAMQPXadMjox(L*p4IV1wH-j}f12T{})bXV~~R?GM0 z@}x7`&HC|pF6acMfaD`>5VKqVqVA26R5}U+vC!CajE9=HI?cJfD(TLHuL_7fAIe}e z-2{F^oD$$9LdEtYpc}7Wnu?mJ98xBZW7w)OvX^-n3twuxeIi;Ty$qFSlIfeAL&vv| zEi9OBVnj*NM~lVUtTJe$MI$(!Pc(yAXuj+Tp_M?b2twhzdDrGy zP6=SmkQg4rIzn+!f%o#Cyppc`FD&jN)qrVj>=XD+jA`#I`9w9D4Xcp_6|RQj$3##h z46(Up1`|&S&o<>RS-PKEk8fPT2sQhB*_?8DHuF3PwnVFmH53z%&DiZz*$n$0+;L4k zjFp7gi{d|KeS37bS2M9@;}}f^lnV{<1Qd&P?x=oyU(62Ij5=mg!*|dhv=j>Mz%oehTuY$!|vI zBn00OEmmRL&HfE1=@$Q=xLcJL!k13M?^=o!3u*Dxh1d(x+N4{@@UL@xX0)0)F?H}t zp7XZJ>Es{SB@RRa6BEkzf^bpJg6Q4&mUI;lhfyZ0BiD63Oh3+43{-6uNfqJ61ZoI% z{=Zp(VxXRLPxiiEnPMj9UhyPqz13)sTBp%T+?3e~A7YCRNX~t9-Z?tcPo=5k#dx$< zv1Wxy2H-nua~ZP%h^}$>i@6zkr+e723b8XiUZ`4k@jM5t&!4kkM2NiTvhVf=($>Gy zq?65rPr#@WTvL6~Wj%u;b_y3!v;rQ%V4Hq*78>{?#XCs{rD|ZcphcyHx8?Q7gC(K> zk(ulq^2E$xHpgi)^Tg?crfOM`5T|M(*b$jvw?PpzzOtF%I60)4yt)PxiRLPj*=#6; z#nF@kUgUJg|TOW+B6PhZq4ikN&Ux^AR)ZaaPrfL<{s`W23?w3+(BztdRtJ-0Rh=- zLV|=i8V5aS0##0?yJ1(Z_K;ZtlG@yCnAPC z2(m+ag(fIQpEtLeMWVRU(H5t%PHR0J$rd;l4v~v6@K8H0O2NHKnjebt2EE1>nU5a# zE$VIc2`crZJE8=HrxMSMJFwA>x$(FJt10lFr#s?*Hiuw7?$GQ4m2Q(3ui zPW)@XaK3Y5TO}NXO}Y(|o@~w^H>j^`j$bW-)G5R$C+6q1%HN=LruX9duT~m+^Z!it|OAJjRlIqLu11qgMOTH3`7+jx-lX6K{9S zyIVt8#IJW`R82fPuf^S2?m7eN?)3tySl%4>vl+eJDTw?7-KH9b$`2~Q@_!t0YA61q z&gkk>TBgYw>Z5)9$69b)D*sN%s0Ettj_;}Kx75RSZNb21%EK=G##Qza_v(m;;w}oC zE*#C++g1zisvdalTv+eU{d5_b=Y_VOy1MC#BX)*Weu3|7k!i26jJUU$>ut#FofbJZ z{Dj6zfPdNZ9~!C}bTy0RcPhWx11UD49!>Z{qSe7Vk^h*ssL)*B@NylOK z1bXM6$IGmJqL)|LgU`n>BaM@k?izyU#uMH{mlD0HX9J+z3YVX^8y@IFXxz_E+_=R| zed@^}iEf=0N&^2dkzBe)%k#Mz_L4F1gXDaIjQlTUb|KG|a{K|Okvl3wj=>nYsFA*k z(P@$h1IjJa^PVgdgo&9x{z*DxErZqRVHZ(y`H}3~A7>!poC)*h3-`aMj#v6Gu^>`O@1|w;k6$1v62zt*{`1EjeJ@t=&XA zU3w1PFay8TVTR*R$+nFSC2w~|ap+obAR0m57QBxzqys2qRUe^|MNAWkqf--eP1>d< z!XB}muTiozx8J^Bx+Eoa*z9-x>?ZrVzYuGnHGWJAO9L&PxPj{1MMX&a7t9s^bItU} zuGPdv9()X*+>Yi(MEc<{it8Sz(whpX006vDlsO|#v3U^dd=<} zaEG*cjItOXYw>d@N05goSzw^n^)*9EYHp6yUyL|HY{2E-qP4VCPs-V)t>U-3gxGDNHV6ATR-i|IqGhCYRx#D= z{4UO8G+)v;$s_DtOrEAoF~f<||54)Wll<0yKDZ^K*`fzWFR%aQX&1KNADosOCoEz4 zm-U(2>%+wtZ5K#n&t?)yHD!YMcwL@$*H}BGGSzVz422c4F6PPl_(~XRH6?ttwT(jy zyqoMMbs7%B>z@q-BsRpOtDWct)eO-j(BPV4$A5{_r*l zXATq9)`RV$j1xmAeA!^ZvK!sG?VoZQVa|vy1IXXhjZL2O#{m>(s*8!)3hY80>f``p%B-#U;8s{auwi_3)b@ZXMuK|b(z8fxnA z32-V43$c(b!(Ia$dZWzVBW*s)wCbu#fbot3CqgJ>_626cQuE?`|5-^%Jry3HkniYt z+;mh-8z&%;k)K{!q895Lc?P8RfkIZSdvF>a`sCTEB^lZ3YC8fMT4F+c^ue#wQme_n z3(wJ2k-rRz$~N=AP`m3g00XT)S42<B zeMQ{Xo-2xr1GlXd5T#2=Emm3JBajb%H>Iw|^Y9Pt-@sz#f}*y`)+y?-xx-;Qvi5c2J%U!_r0wQW^)Zg4OoBg2H1&6AB2 zD&DsXl^9;4-sW&`9s0-OO`d#!PKMZ6*D4x?mwm_IsD-@3$yLG0om|&gAiBAqli90H zMn$FCKgt)Q@HtpU_{-WhzWhIvjYFKeygY09O1Tr(t)-^&N>NZDVs@~1YY0{+;&z(Y zDD17oTvS-pP@l7r^!$bZ6YkcF_pP6S{~a~f`-J#6R@{A?#Kd=(Tf_C#cnYC`*TKPh z+UhQg*MN1iv$MeF6G-sRFJsB^!v0d6axK7xB7fO-yt5RhqYUwT(3>Gm&W51RFm7<- zmr+hFKV!1|KL4K@&a!QafGzoGr#mT{DqGQKtH)*P_PE6Qoyq1hZ zSC@*~-K{Vv*{0!>-pN*gX@4wvs<2enA3Cx!(G{5y)FgXH4nfz)jh-Y7Ei!G9lB7#ds26R3lqFzp- zVd>#W{3KD%86s!@;@V_)SC?5mH_m!>gtab7&bpt=T{=#nNn0eXHI&7%z8#j}Ye8U? zYq;dj`S8PQKK4Uy1uw)S(D;L(PrkQS$&e6Ukri%1O=joelE>fPtjqFq3vZ0sHG4nb z9K|GJTjt6w*R|B6cJ?I6t40xrcy_@rRa7On+mq$!lsf}hCrf)}`J*(VP}Tpf>0`1l zd7b%+T*ldXsaNvO((tN}K=jUn_|{p-pnSP0&sKZFxN?wnh36%&9fmW~*0-|tBrnQ2 zlJVY$jIIR3*0l<5u?_Gya_{^rc=a7_2K*V$jO6q$(DZ%2_fOUENKU;3T-_9-1B1D7 ztXq-n2K&3&E`stp>c*$NEBOuh7j8hu#B*CDBXKvI>t=y=yBqDNSn#?jyX8-RWPRr4 zOCtfGNWQ^owf|2S+c63}Qb#ie6H;ZTnr7Qk3iMJNMnUeC+!*_cG$=keWC~g^kc$#Mhajnbdz(#dp_>{_` z7a_>y*?2K!l1Z^6GVK@niKd)T-6tM!Z|UEGu3#3C&363$gFr>XoWrH8^yG_Ws7&QU z7immE2T_Zzr{Q~<54!x(fsY$ABrZq=^eLOj76oJ;M!+fX#n;6irmg9FBA=(eo)zU8 zE8+`8|CB|DipbgVu8s8YUxKx^Cc6B~AGjEcoAfGJ+Gp7@kJcFOm#VFWYdeeBED2AnHLd)TQ&m^aJ^#klk;) zuN0AGjiD#(f9I%(InP_wk7H)()%-P#k_}W(jk8akb>IJ6l^9bfKUxbYEZRTYLc3Bv ztRh&9^=D)rbZG8At>g-buYIPi{pxU058>O__X{-kPd&NA>iXoTMK)&TIU=hc6?`c_ zpoBit(s>DA^9Fo~-~h9dYrx!S6rnWgOCKB~@D?3Y88^~15)B_`!r7M)*vc|J7o%o; z6d%i%T4t!sIm6t;;5|xF01-ROlkxa=-TiKu>sVb)WTo{W$gH6cShPnqs$p_u+Psjn z{eIqAvQlyV8#v>2Trn#hwc_Nxx4?W=WkG8Lg^i3e69`q`5j^}pq>p(esg)Yw81r!i1myz zL??th4egqAo6z=CjC$&u?W**1+XIvBOV_m#C*EI^s-NAutbB^&W%N<(D-wa-9VcEZ z-v-qD3#-7`rqU~IyrF0QVN~_tTD9QwUehJ2sP?T4MUVquaT-(hZ~_yiD?i^WYl&hB z1m(jJfNlJtk|CzDQ;~~#$64=)wRp=@yySG(FjN%t5_U6R?pPQ^6~aL`TxfN?C|Pe0 zyce-uLcqPmjh&zr6yt9PnCC@HT})Tv*ppt%WI?P&nWBn#8&-8SDhyDePI%}p=t^aP4kI_dBL>Trvd|UrV?(UQ z0P_@basu6?k%dTF%3-*brjA$$_cOfJi~v3$fKM_^lO&c#Zt~oS@MJ_VyMQhY%zT}= zrRr`*H^R<*51f(b>j9yqy^vTOdUyM%);5+xVI1U(j8_*}imP8Oy7&t8A*#9CW9q&( zA|ug@TLC!~DhU|pjoSqfoZ)g3cy-7kCROWDk-i)rB0Y_l4~O6s8XJ0I+3~ibOnr&D zH|4@IJCySMDN(`cx*HN4cKsho$TB(iP-NHNjKkI^o1c*?yHL~JK79cgbLEF=K= zvuLUK#h3qtPB0(Af}XVU(7s{&@~pKo$(cbBvV{9O^&1g8+Y@TpNq58bdSd;*J~7K& z!Yhc0Dp@e_V=tteZ|wP#?C$6U<&ZDTGQS24Yde6}11sJRZ46dg=c6I^_(yB+YWmMr z>OIlow%dEqfa}jnlY}qyK4NdUe6ilJ9}MUwY=5yaSHU3Kh`j7ofWjihlB9+4h7MDU z3L-J4TW2`)aJ}Gidb6&c_Bz(FHP`qD2MQ#rFnit%=!mj9nc>w06X@~%l61*XL!(w9 ziaE7MFLBq1aIb*1zCF3XY@)y!Gvi7w zUzo^FS(-#YEdn$Ev`jXgRS@D%Xc0PCb)d=T#gP)x5-qy*ZNE8nEce5m2~$^ zT4Ve2+=ppA@O{d|;?Rb&LJzU?;|y{p-}mA|yiRlX>q|K%R)Eq8ts|bVf8hn8<$C5> z`;Z39V>{fWIT!C3O-M5%swfhs5YRuYdGl29>|gh1m@I_g?o+kPX%m$_V*;$z@N;DT z%E^mZ3Gw9DZULssG0njqs|b|3tU>0Rt7XTNcSgJwd1RkUQFc0BmEH5z?;FHdP$x1d-Rj z;!L5jq#tKd7t5Pv5EWAxc_Z|FA@-W>?rOl>xou2wCWzg$_Iwp2grSBu_fT|yRdg5E zQh^gXC|NBoH;Jq`)a=7FeN>tUJ4CDXbrMO=#>us3HR~)P{KVG{*jR6I*=T3{rtsZ7 zZVk@(sSGyYSOaBTy&%dcNzM#^|9j-~<|(Oub;dXY-7sT{YO(RRu$Wh28brpq9G(J~ z1Y(bJe}>Uh*8!s^Fw?&UIp@38;=JAB{3&)m5K)Nq zRQ!x7&h2(k+hLBYY^SjPUr{2=q;7K@u(1$Mb8joOY!*7CctltDt&+-p0mS4V0fkSo zmBz$Khl%r2#|M|DW@|@%a`h#%_v&m^Ei5(>D0^5(iP7kKnaf78+gnFsCG2>B*}f>O zge`G0xmP>KK*xX-B0w8r4Q4PNBrT({s=Am2Cigwct6dpZ$p-^i>p!A3AI(k_9#paA zQZEFsUaiZ&qY4>hl5rW0ZOWZ0Vi$!ciM_`(lzX-Mg7L|zFvBOuWP%J-u}ZQ1_$M}^ zb^54=z9Fe`ivbBql_j()I1u}D6P)4Hn#rmI)(lTvk^3d2zpANs4HebqPT}J zkN+4ZYL?i(s9o7;0WSPW`!#NA6zf3e;sb>C^VE7NJE}b7r$&CbJ2EL+CgID9Eu!}q z`H1BzB+CR`t_w`lnIDXf5E`5ufsE;JlV0Ch3Ne|hRTPft5nKyko6hV!Pp+@p)B+^R z^BL#!NKlZ_y=*0uY*U%ktv?D1URj{?3&lzS+1>>_;aQh8P=9bqdPT3E1v9lGZ@GmZ zxnYWfd#W+n24`Qcts>CQn01A(1UaIr;MEMR0cscMbJlQ?u_>D2>rKQRz^19)u8gT7-<*y=L zOf^()eWnZ~{6iao5aU&rV=6G03GVY#&VI-_-owJ~Cpc>Qo^XG9qCBkfRT?7mj%CX7 zaEr4Tv>R@Ci2g($AUH$_9Da`Hc|1d+G=lwYM_6zb~Zyv}lb(ILk zJy5-Gz=DoC#mv;j%xoc`nPXR%COl&ty52?yrdwx+ zkuoXa7GmtF&un)hL?fk$B|{HcobDz@ikVrrVca<_3(-fp4qdm#Pl!cA7t%Z;Qml`&wBL0Tok->#ZNg$Okj~D zA3POp2GOu_@+Bt&6@l~!5_}hJ9B$Gh7{fdGnYc~{H}9Cp^Ak<@8b}yq(X<0y2;Jd7 zA@Kmr5WQI<{WXXd zvPdV;J^01SqdM5qbM(&P`MtqZ`Ke0cfQ?;vkWV+qM|@~d?RlT)QE9X|p2H$WcilUtAM8&yFc zr5G_;931kpDftbf*CVrWV+Ui~8Xl^QC$)k=X%yL?nGwFjgK0>V2cU{v&BPC6Xc`Nh zFlQsd@b}w5#h@{OBo$Eg(gVRFA@<&FpV=NvbEqc({BdbHwqf)U=;byj+y`bQ7#=;^ z5yhInh}tj&@38^mnvi)<4`{b6>W{GruUIBIg)}cdvmPKam()bTs(kWO>|`$@VLg$= z-1_pRLoEt}wt-cCZ4+|FB4!25XwANfA-wNY?n`-dmRdT(#x+dfD0K8*b|Iq01Xf|a zi(q3N5<+8zDDWte-(0*7g&$R$;L!UXXs^e~$Y!Y!P>6*<=xm2;YucyiwL`ZiKC8@| zJncRB(qR@G;k#@lKZ78r3pxuJ9~EoH1v=&IX6(;KC`8;bJsGNn$8Z6B-9lYS@~DqO z+?cD`g>$IP)W)g*-z-3YgneKWf1lUv1p1MIv(2afTEnOWf-fE#l1D0)6f$L@gtiJd zV<%iTIFKizV&NiC#U=Z_zVu9a^JjrD?!Jt8Md-S1+{!z!oD*OU358z_^7E1s=#^*BIpz#Sz3P*z(0rTDY<3$d{v5$IO{;8n8>yxV(3 zETHiygM`W2kpvy=;@5ob;at4euDJy3R>N4_BZfn(Iofy74;QIEv=5nd6p zB(XTWOnYFq7Rszr`7J1+R|kZuCn%*9k`mfy7#CSLCT}SxGtz6jhSdNRH~#r!QsX>U zvYH@m#IL>|O<}$qU9syOAc`D%mga8eR-t1ecK`$aTp5pK9t~`pQa-%X`(1Z;Ymx*a z7PJywe>vL})BIB}rVIQgUxO2H^Zp@)(AB(m6Le!zRd@Jttmp|TZ%6&6GPKBop$roUS4eM^b90nDgyKw~A zmQ;$FbSR$Xe%v1O6iQTzTK7KYc5IS{1T5VyTx=Vd5Ub$X->iqvW1x?uLtNm)l+Z5O0>NmqpAD`)I$N&ja z!F9?KH4SGEd6M*qw@rU~R#?}L;qDQ~&lg|8m>aG)X{6xGw2!)4%vBbq97oPm zmiNwBfG9R_&++~hwAw570hCN)bdENjpp}=#^uP=lY(4#8yM-E|SsChh3MEW(hd^B_ z#k+0nKjvE5i=Xen*dqgMA&MW&-AwEWn?q**4iD16mQHUKyNec|67xV32)l6)(F-mJ zb_~(I9rVR6r3LS|QOmUtl$4Kx?=xlq7AV(6MhK`3ycf<2eJ`{BXp(cZ(NZ0kDyewE z#_NwZ!XYco7q*I^KM3=8i^=FMMp@5V$0;7^YEneaoBw}LP&CJ2>de)a%ppXwsY=Y} z=Kf&68bR@a?cV)L#ot}9`q^x@m=xIB1b+Z;)lwL5m6gg>WVcj|X%{^Sa8@;LH4-%P zzd`@wUYOal*>ajMgXd_=6rX*QH%-vZibR3UL&_KtGYjPFKnjeGq%dY#&+nBnHl|k! zfsMZocy?Fe>p+)h?KG7;$>ko5a_Eg&mc6GLn-5c$8i$3#NI|Yju7bU4H(BR7wd{Mu zrc0CXwpW=GOHa%mb3I@1cv|~p%?wQh1!`~R_k`L|#M(^i8U9uk#&p)rHXo=n+s@8g zRNGtcYv6dHjw{m74~9PNH7G8n{C#=${MBZ7Z-RlZvvB5qPbf7Vn#V^7jDh)NG=O~g^-goLv#KKa zUDxsFWJ4G<9w|l(ohm2d{0Yk{>afhw#@`QHgKyElCJNLMA3G~#RW=pduQcfi6&|!* zwYk&pxcnjv>I$OqtMek9H*2(${z@hNwIF5lCuk%q#F#I0!N~NDX=vJncm}OH`tIbr zAJ;7x^Fsq)OVP!+6b4Pf`8Clf3l}Tz{yPsiHIGg$8%N3RXK#_h5miklQUdS2K%Rkd zo1QY;!V2xe`1Z{RbF|B)8Hvt7ddQ{&bQd{)1(x9Q89Sj$<+L7f#i6qZbi?Sw09zE| zeA*s{(fe_SqT%nlr-)}^Ysdll`zxAzFIYeN!aDljv1LBt2Wvy6H0|My>917IQSq+# zPm{^Q{f=u@aJ)5jkoog0RIPGqKqr#4$yb|3SoCaJPwM_D0k}n zdxcfg^W6X;-s+xlj_qFl{!2U2Aqh72%8Tj71ddR5(VDR6KE-;WsEYH&-&z0no`%#u zQ1CjbtT}SMG8w@TxJ%m>OFqchsdG=kK-5EmDZ5`VlVZr=hkqUNIz zCX_Wmx_%&i@{5-<3SQ zzv_-5{imlC>W#^nVba&0J&(*x!p3tged-GU%ofrabhiGAVA zf}i@6^-SJa=EJn}H+@x^)nNg*7ej87hh8OBxEB}UsJ2E##nQc!SXX-F_DT$?h^_B8 z+)nTj@vsAxRH61?2xX0~QBkD1S?Meu#cB z#?R|jsaabXjpvX3f-keq=sJ0t32$9i207%)a!ucp3(LF`B))&5P=9fIpK;^nD&!`dUd)>##s-d2#J;YmMz)5b*|#8W>LpKtj#Inr zv-WfC{k!PNj0&}MWitU=xGTR1^3xiNmkD z`>Cr^R?K}+g;c9=87FZ>m3yvpA0*lMNAkq2T=e?%HZoIc#w6H*&y#!zn@Tw{Z<%Vr z=dJWNriF~xQ4r^&5%-`u{UnA-M@V@|yaT>$C{*I9zIr{rq$G!A^3Ye|0b=bQN9`mr z`kE`PS{+%ednueein$;D1u0(%8_v6u#63S6!Dmlo4Wb6 zU@?~M>&>6%hE8c8V&6qv^>)ACtKKZVQD{oys6-jqpsH-cf7>kOsL^=F zx~0Xak6b2$XC9Ucm=s9uL)hf@M_%Bq%PC+@WYS8GcBmXce%C7?$>odDeKesve8pd+ zW#%$Q8~YJq^drsBO6-Ans$*^L3Hu32u2c{k-Tb-jJPOf*M3RU9_gj(g@p^APh*}y3 z^-Qs}I**L11{l@LUBPkx0mfSd6?6^woKKG$_W-RrvEpzd(1FEUSLY;viD&G4}HRm2bvPJ?wueaFkzn*Oc z(EJymy}dz5I$Q_`yPY!^5*YuI0iQRpm|@S3;nOLIGTD&ju`!S`cAEdH9Q9X-+6Lt; zQJ2br(R1=%LWCKQQy*riJ4&uKeI!`P-IoNQ-pV8N;yPh~GBz>AH_~oPjU%^F=7e<+ zwNdt|dVL7_Lrnhsc_LHE?Hv+e*NZ3C79J0*v|nP(tUMH95|h=y7B0rEY`{`PN^jh; z2q+pFL5+Yh$s)FBomfwhFIb)6GtgbxPamNqM@1C(zv+LJxm$DsZUM_4-FZ9q?YH)P zV(-9=jf^f2o0j==J7BeKLnuW|ZWihEwD{NpgfB(wOLU?F_Qi1)H#tc%0k^gIh%OYq&)#nLL8 zQ&VX!OUfY;x4j$0wJ!hp?tLaDi8RO7TMpV3oeszge|UAL^pR_=<}$9&luwFopFar^o$=aV>=8D8Qm zrB7CHId3VnUzTN#_^k;R`MNiRNp`;q8$gRJ>DkdnicKM;A-V_io~FYX%elfR#)O5s zbAOTDoxeU=(!9^e_c&-VHPQM*JZ0NzVZAFeuA7$#Y)D~56c6NHPFXY3bW7DqdFU#TWEs27(P6}ZULJ@~c8Z9Bg4j?cIiA+Da1dp`6L zv!ehDDi1O7^&!@VTDCW5EZSIC-j@hG#TWkc^hQN)YYNEh^TJ3M&05D>#jw|;7-qMe#gYq) z>_w~EA=XKWJ%3ZNzD;QEI2-iQTgO6p*&>SdP+_~!j1|LKiLYH@8j%69RQ-md*o_Y8 zJ{}>6o7*lQEOJ~iGWlTfH`Kz^xkLIix*lab3gG;1X-hKD%BD2-zWhZ3 z3gE40wCL{;umfY~HfJS(2&|e*WA5E&5@dJ!(^LDR<3`AZF!m;F$jnA9_Au;`r|v{( z{;bFvCt28wPs(bc_u1H~2}^~u%MwvQX2aXzj?hKYHXP2emdU7= zsjEtw$bJ_*H+cavc;zboo%01vh7RO2G;rLD)!gTWCxhmJti-Wl#bGMmuiG8+2*3Qx zvN|>s@^;BMYFxuBpG-J?e?+tpc-E{g4wjJ}ZdUO#r_cAQ?NU}y1+3_9+0V^)CIHF%iRj^M44Xh4knVScbrq}ydS=TV-f>}=Ks0c}<$f5P0w5nq zNl-wR+qh;8%zt&CbtLry9=*-^biTWtLyP1k)2Fs$d~C62e5T3cQ>_U*t$dgbth*f7 zltgN6j-7bT%4%=gS{X!b3;eKQf1i1r>nKW5#y&^a_wjGS^17PA?f6QVqE0nf!plf0 zzL#TuJFCW84&94InIp=l0PkGT&ku~NmonVK{8XtYh<-0d8OhTw^G&*%jGn>c6|#*ZoD1;i!``nV3J1WCz&ldF>8y;}PQ3Nl{;t1(1#)hpby=PC!EH z59WxjkH$KRp1d-|)04rQ$W>iBL)XjQg_lj574A4t~$87{Oj@obhr3Z*WLh|hQ% z92*?&CiSzujZ`BfYL&)|&3hO&2^PR>4THLuf-~Hh!)IfcCg}6Z*l-|a*5(mxW=4q_ zRTn)PwzTZ6RWu;k0ALY7M|yK-vz`Eyi#{R~pL1oeLP1j1^XF4EmWL|r0h4li?zwcS|hdp#Z zY+>!aR%!v`OU2Ww?PVSJsT@J{E&Jxy-(n3KZc}IFmUe{pm{80Ty`3fm-~YC*^S9v# zJP#5iT2xj9EmHdfdzh|cv+}#!Q+CdgxT%WP;;}UhIomgKtWkin^c%+h7hoq30s=MN zsK#DL6^W`*kTdLNiU9T+0PgTkij@1FNiN`t(Ys0c0|xwkVNE4*%Vy?BWP>4U_dRcq zkmeMv&=l(FeD@P+=xs6a(sPKnusmJWvZGlO|47cvd~oRbtKsE7d!x9bpm66 z`){Dvn@2v9h?7*7|1G_wG`)qj94TFsa{$I#P{l=2lBchH#+RJ!(A%LVk;_fx#FkG@ zA=gmD5$En+WO%0lEepdVD{(Dx2G;{*$7mA#beGkwu)fM$CLY=Ew2_|&%)yR+6mSF{krF!%8BSV8^8ytd!c z>Jk{rKJKT%4=nTG5Cct2V_;yWpkG<2ef9z;Hc0e+F_uZLrLiswimn+m;o4gGjKw>) z@8pXFW*&X4vBn5`=x*`&A5NDGGv6kUveh}DytPpB&+TuSC|S%4_zb2`DcMw~_o0$| zI6Cqu^c={_P;_FH-h;`=4tl>9*(_P|!d~YP-2sMD&%zPMJNOlSNSb4)50PjVUkY=a zYXXh;gXO-z4al5UmP3k^#x!ZlLj<@Q3ayR`_3X~XH|bXtU9A0*)!E@T5WSs(?anvD z3LN-KS9L`Ry3+|SKegW5de%wL6`4;tCPmqp8tW0laYk`{Ix42V>NdnNCi;_9c9lOP z1P$NbqCiK%xCl+teU6P0ijJlz^RD(<6d6Uf^re^4 ztb`c@$(Il(MTOWQ><{MaB4nJ{5S;3qaVA{rA|?#Hb*wP*uK^GYViJB=9fu6Kj9f}X zXHk-2M$85N_aW=99lLIr#J}+anMjPu>Pbq{EcxR@_p}xLzW2;vD1_H~t4~LLw27pj zn)wSSMiaqw+hYTT{^G(w+}jNLr0rmrp^31Q_dtu}S$)phC}#>L0IUU=RtyA$Y>}Iw z71fs7&1mXMgY};mU+@)JTTD`1ct+X`4s(IBRgv_&Nm9tvdg`|oC-ydKvNU;d#RF_+ z`aB>-;2U1)u<;L@QWCJU#mBJSK4$mJu@wV63h+Y{AhYi~rhU)|{xv~6E5MK@pL>0; z4Pf*HZicvyNhp9v6&1V@!0$d}Q*l!!2<&;)tJ5nTQy6|Nc{b}!XP^@crUfG2rgVYH z_k2oP&WcX~(;ksY!gXJSX~@z~riHEJgg$-Kr3_eK~DKmwT zo^m!pFnpKHYnq@XnJz`sR^5*7)I!etl?rP_siq{ns@6=R=`B{)&$NE#2p6eeE$s{?qmC3Qzm$1t+gs&$`*NRc@Blo+31Ae{Yf5ooI)HjoNhNe6Yysy+bH#m?-3Gi; z?V#w_+IXCQXcl+}#KVyB!yHGa4OOrZa2UY5TgNWnkVWSHKx&gDD+1vJW}AU-E$-MB z6n*N(4p|e>@+UYb>A!LFqZhBqIB`lFN(TVQMbjrq8qz&A;mntT?!sPYu$<>%EeMMa zKfy?-UZ40U?KSOVtXk<~T7FI@cEET=Em)io5qVGvKy4sKcqtTGYGM9a>gJIj)Sk@@ ze+^N4r!KN~+qvm>pSu}_Qrg22o$BMb5aVn*S!~Bx7L;C?2VtgtAc@{y^UYq^@Ng=0 z6Po`jwEq%%C>nCn`dS%o6o>Dr*zE$==~N%YCMatas(R3%sk8}d8JN*`gU}7FbjN(V z4tKh0cKWi4wB`k6zd{c!8CBdP#Pw(I`Qt5Hg9SIxZg-#XZAf499d6A1!q(|od%zr$ z#t2Rz$zR&JzYM%-Mf#M@N+L2KQYhby@)531i5Rn-=3k zc^OEpyTjZx>;7q{UDs3Hw;zZbEBpuZHwV79PxtEQd)w9Lcnm;x2Qs0hhenrGka(LH zS00?s<%Ku@#4sVyvq;z6AZIFTih8W;LBsKE1rIZZ&bl|{Og$LggRsf@Qj)4^ zfKuHjccnI?+FFV<1Fkw0POiKVc5`}Jd|<1B2MtB0JdIToEDCk!yzomnF-GLhL%`)M zVxk+TOkw+ec|r{5M2)$IzM5-)1oT`KxyTUjSj$z zl}hPd=Vq0wih{f9iK+eVg?4O)Dm_4YrUpTA>pA2AtFG9|;`{Io@B)qeD0zeB;2w({ zQ?-G-u_unl6k=*!HRk2__DT{M6~~Kw*dU{a`g*MWZ~&I?`Wle}Kq3hG7>Ro)`CIk# z{S{zUKwF#~^QVWp(_-X>i!MO{kNqG(%|XJ&WqnYo{-oBB^1QKscn@K|el}$REH1t^ zsK07Zf`jt~oQj&Y8ZhHvw&-1`TvKED(H}+@#zlB>L$1Vqes+?`*XWzEYjU`93ujXJwx_G ztSG(can(;tOO3zk@r<10Mx1pwMp>KN+N0nM^aGj~1>f1VX*=x`w<=y657lF8`g|?S z(tjm6YS`z0*zvo5@)ANlT!t0pPa_F5ZQQE^3S)u43!i!6T?u>j-vmHqRm3=ve>uO$~;*%)b>4K9jc8Y;Ee+d`qCShNE&?KlFF0 zSf$sP%ASG(lOF1TQ3)Dej5XG$cf3~!Rsz>)^fP_>DnB>p53c%=sx?OZX3)47*<`lc z5b;>rQx+F$HQyh|I_SC{{;%q@r`-54c0Uo3C?!M5g@Q-15`KW8M~?ybrxa))Jwn@a zp|L(ct>?hj-5J}kR6l|=BeZdQnRMN|D_Ltw#po;3jVM=OP73QKBUD;};UpAFO;J6# zfuW;6$9)-nApT;};=jkwO}2V*Pto^H(L85Esvy&5vY_ePZ*|_1ww_;5oQy|Gt1Y1T zaQpL>1=Ug*)WInvg)1yXLNY}MywNVO3H5|JPx%(Uhul8qv7}`0&byPxb7AnQ@x17f z0%i(~>R}|&9-0u8m(8*Z2aayh8_oYAZ3elFGfYlk)(CBi36(h2^|GAL%?T^cX!mxx zr#zhVvD}*UIAZ3B{a+Ctc)nKSq_m`uCAf;dtTaL*ZU^-fQe$0dyl@xeQfZL>*26j! z^4wbroNnEAG?j^E4&+@FGV;f6je!_N=)`?SuDfWN{&ct=nDCBlN|GE5v`HT*1n$$xz(kGqIQ zXFag>%V6e7W{ck+G05u&L1#qroTM|$A+Oi{5m&u<->)J5q`${sE>;2k_=vS33XL&6 zcA{)_h0E|FWBV?G%b=wryS?dTKn=c{D;M5)%2g!JKN{uwn1jvaZ@Uq3BLvBv6Bz9E zU-)n`)w<_Wl5FgjraZEDk_5=C!?9bw^AFXnE~|5%tM`9_B$c!SwmQ~4BTb1lOGYPA z+i==HZ*L{-4%>`ABs2oVq3=%3RxhlmGhX*lVeuTlysP4>WCuro3Ikj-M_!z!MYzEV z!yq>5v7$D=Qs?{a`|B2ef*|A5GxMeX{h})(!<@Do6o~t+C}4#<4ZG zb30G+x$NL8{8b^j)e-^D=H9?H;_Q=sAtmxj%$&_qoZ-iAIp7tMdheMqK93qB?c!kw zV3-2B8BK%mhmB3KU4Jtn02D`pvn^ag-O)JqoSiM7JvoBX;g#j-A>yLH%Zg1#_jUm` zIB`td+}0fRymt>2A+%0s-~hI5+EvK)1uehP`8Wdrg<8)BL&}^X0Ew?2mYxgJ!!}To zTlmecMD8HD+II)B|k9uM*Z3A9S~$u zvz9wfV~vKHIjV&@(ydO?dwUh_@&Ncf$ihT3OJs8KvNYU(jrqv&H2l=53vdBI_bO>O z7rf%0{i7`cskJdHOLjkPQhH76z^?RCaG~$_T1mmpPklFE2RvsX{xE<8dTt6TvObwi z(Y0l#cqgyP-kI%O3a&`)Bqnyp_5N%u2-T&R0-nM}a2|A!rET@tCs|Zpw!1Em0H~X& z0Ek*IM*g9%A-E&T^v_SdavMF7VYf~PW*iT=JRUJpI4y}nWz*IZY`O*RRFP>m3Sv&1 z_b4(#T%9*AY;xxLulmxg*;6jwpuik2zyV*DyC9M;ovfC@)^<%jXmxd0I7B>xJZL!9;$@+{{9& zVarj2L3=3UFJ-#7A|G@;cKqhgUnE%fhuk4uS@2PhZhx~t!S@^@loR}dtunMEUw;CC z)QtIGdoHWlTd(Q|Wll!8NNPS5*3wdk{AtrVtuq>&O*&id%gQx0dd1*h`xUZ>zzfuP zfqLKL)Dwyw0T}pwku*s0Ab6>>~<2sJPfMv3dStOR%9x zujJvG&x`ap=W48UKI-TXOgq-`Bs*EY7>#fyo979bvFOn^rKzCm7(F@cRyzh8etMOu z9Y_1BkpA%Qj1;KzX$X0~lU!W?i7p&cychze57y}_X|s9{5Dvup5am+(u$Mj7QFa=< zr!z`GEArAt0DX(xnm<{yTU!ooUL1iFZViZS=Hv0XFeADx?=VVGd!o1Y61>NIDu&NOZgtPX?Hl=dSpe5^Fn@d*XvyEA_uD zzJDdjEi%{RZ-L6g1Lf|AO^kaxfMuNdka1DSWdvc(=0;Sk?eNVCc!Q22)nSs=WYY3= zJB_zcX+0FeYRdyH6+}skHP$g|kLmccKS%&i6)#|h@%rwv2g6a^j^f)x_cMQ!L`5MV znKnGYnJCc(yz%)Y4V7`G5e!9fbeCP+d=FoXo$yTKiWq!&B#9Zga`_w8_340+4Z!^} zZ9EVj_D1Q&$GbWicrMiJJr~sk8N*LdilqpEXcILg29U;Ij^V(ei5jXv4L&;syTp$H zkl6-;IV76Fw*?PMoNzsP7@BW7boP3be|KzR+TpW!P12A^W7#9Cxa*Nzi}C+Cl`K2~ zsQ~JiUtW4u6e!}on#yZNr1jDpM`ht{KWG`VBjWa5C79kKa=+VG{|l9V-7$by-qa@<<&zE(ycDh%hd$=hq6 z=KdySayL%u(Xk@-qo*l=c#k^K0GPA;bi0Rf1;^gjj|e6m{sRg%t-ih-b$kvWf2?}3 zP&a$L83YstS2dh8Eq=3CCqO=S^u||=k%~@!wMxy>s;F?(B>E3GT}l>0%NBz`#c$AW zNm$>6ln7n*Ri#OM?k(Wr;e>LF@;JF#cby#3$O3op?*?|EpdaHbaN86>-XoJI;$U_r z&^bo77g6dje4qEDLh@gErBECWrGDE3g4z7+xuHLElCq4j1xn>vSndvrNLW1}36r|+ zs$)J|t+G~n_7ndb1+8R&euT^kHZ6Iqotj}Z4zKh1j8JIvdXGsU>|@J|j{VMiYc-y8 zm86c1jnXAjZ8aZt2q2g)<=u|mdO+((LNcE_<5EqC1d8wa-wHBhBgn$2({H66s!}B? zq{3|3hdM4`hM)Hqz_QeEGbIYJALMYc09ylswG)r@9E=`NS3^NL>~Ukv#PUBh2NQhl zk`{0!9k%BHYP&#lAW(*R3uIZK#f9(qsN;|;*TN-M$m`pLUhbwYTYq{+m_uk>nvKn$ zdL{t%HGS1_{d_5A4vK&}upYWge2f`gd(HRXt}_XvGyMc9B*t=_#k3_)Vva-GtT}1j z&eni(N{b|U-A&dVX!go0>la8F=g%bt;L!b~-3(4-)b@((`e!~? z7yO6_U!5?CpEVyo!dj<2bbE29A?fo6zrj$9dSfdns`)*A*)3D{(!}b$?t27IxY*bz zp}!qj(khD8mOQc?qF_Iz!r_z`I z$a~y$QX=O~>Q1tF`#w`_?3d{#0boZ!PlJ~_PzDlH#s+lEAL=+35m?yNG9_9UC4jDi z%}AfUOY%M?!~83R3JJ+eyH91$XoDLMsH<)c+z1W~D~?ETSgE$>rY#=W@IDrHq1cgu zP0a=*ghv!O037v1bpNxdCGt#s%NXTc;p{E(C+4$2o>e}UG_|)C0v*REC)5=@A`@_+ z;AaeDpjhyJZaP~#7LUo}=X(b^G_3tE{n}OcCAUORDZ11Jt^R2|V;fXyDrM{R|Db`2 z89A&tCNM2I0>vdJa!}KAwAx{aRl-R^kHY7HetsJ5<%#h!48&^Xj;^ao^ZA4C)|Y_@ z&+ECtuPJ{3f>YBiJ9k~6R?q~kZu|8>IgZ)i?x;}O(0DUyntU|Uh9c#M0#K+fF23S-j}6sZBQ-&RDf+?o zRMm+>2i?2Dn3(^9_hfpi@kiPegN|Rv%70{&G?4h%?{9kAq2Sibavz z_PwN~U1xOu=p)KjnTh|dSa$r-f)o)@?WT2A#P%kpa0F=Mz+DnK>z!QEJ{9ZCrbFPs|ct%$`y!R>n zo67GKf$f6NEk2B^1A(OkWLctPYhL&ZykgW}a~wr;Xg}c!RZ=Y@i!o8~ot&5gjcY)6 zh7xOGfGTT9?tEZ%cZB)WxGg15q2*v6yBm#4OHoSFT7AWVcQYa*vJ&vW%rNiyr>B)4 z)Hr}%aM}i6lBt4_`j6B|^KmRSb$`ESS%WiSyB*?cux(075XOTsx;=ttO_zAnb7_p& zAaPY(zKX8+h@9tqx^09=vz}0F#=7@@EU)vBy%JY}n&vaz1-(S%+$MeHvAm*^Er00; z(}l-%?f5_#NZ1w-F0h&G_31=*XBIj9!BD~zqdRZ4WD`XT#-%B8j6ud99l!A?y^kmPc%4)w zP4K?&d^aerbKuZQtHkyaIj<6+-8vEQl851bF4+7>kSpkWpa5QMfEpb zk{9DGFeg#Z+}zKJ8n_HpVzS02qw`m!0#@(gTS8w=A6(U_!E-XEEFNz6+VnqM)S?l~ zCNmL;_?pXDW69kiCY{J)f~u=kak?Zo~)VOn1T(Q% zj((UKE=#ZFq`E7yx<~i6k=_wv#zCHm>3n|`qI4K&i6qplKHRE69A*>rfO47mFIIf}$RlFO+og*tG7aa zatM8{+vcZ@?dbMy{2;tR(=Pc>?|8WuHl)*YA@$~6z%w==w}dThSpgaVy1k5n3ao+- z*P&dV7#-T<*sEPXzvFH`b`}l3@8*_67_&YMA;?IDdGh}P-&cKaKp=6-05(_t9tuzS z9xUYcWx8uFC+;|F(rqmGBP+UZ9zpc-KDQ7mOh2vP2ROF5@-EMXmu$W$#b$#lJ3$D7 zkOI&XtFy(2wCZ}IMW$oE`#&!4xovZ~VRx#awcfK?$NDf;U05OrRXrp(@cXMu+3Wu~ zBB0SYDWs;FZ0r9JE)B5evl}^@L+WA`8Kc}ZwP>2EY%h;f`Rf8+zACENp!9FmLT5zB zAz6iKuR*Cz0o_B1@2l`FE*}215`3lFca;*M&Ovj|p}Z?v+<@Pw<{miWPF?8u+~d_R_yQMQ*KRy7D-Dmp zc1hec0HS{*Xym-2F2~Fs4yOOcHJdAemKFBDm5Si>g~jznIP4oL*`IhNrsxwhU$$n1 zG)(nEQeMh#lSTN5oqPZ5?l|;+Pd&+C9%2V~a@CgX!vtukBe6BCK1;5qVFpj^Hs#pf zQ+(%T_hg(m`$Hx9i)0p;e#+(}t2MEm?rTv-RES|Gl-NxKpidZxKFH~ItFm=xi=NYG zsD`r5nzZ{nzwiU=a;6;IE70%z#*Xltn+yf~>>toVvwaairaCVf@F`OxAUqgtck^r! z5JZR!LFKI(2LA0(SFpD|!QXehza(mV6|60mC#mwi+)U`IMB&ykMfKF|x&NPvMYWH^ zMi`XDk)r7T_6y`Y-DOUCj?MN??OCDxX>&~B+OgEZ#stisTQtim9K!vW?UMLYMd{XU z`wel(6#|75>4`<(7FcnQaM-IfqHvui4w4i*<>1Yp&cBYQD8|EE`}Cjv@6T{I7@gJx z23@BwNuy9HEG6X-1uu0)lkwG)$){R|9(y+{dI&G#yqkVQnLLcSjF-0uA#FO|2cJX; z8Lw12^Ucccw-u&;&@q)+5+DLFXf8U*yG7>ACV~|qnIG?6{-5$SX}aXKu3^EN^(;vq z#5*ZF=?YN#<)*7!Z=fwQa$&tPquuW+Od<;{(?|qKV&7LUso}pjvHza&4^}-KAD zIYOZ>$KFVp12O3`3{y}xy<-ot<`iN)m4Ms2CUwZG|F?LGpZ}RJOx%y2(4=_d^dtwu-r8?b0QN=Vj&g8Ih z$6>y{UrvIF@Wj=g^R9vw$9YlwZ9+|PXSpCc<{~%vww56hlCW~-$&e>+3F_gw;}A8} zb?5Ntl=m?et;lXS0n&j%FclR@=82Fgrg5U+`jJqzsqVYDp7pjB<7P_ql5}L(knEyy zAME4h*Adu^CAeF=&K>2MZ+vYSLrc(Z4zVAu!;HEx*|^3?0{!)opA&{H1pHwarO5HI zOfD;D#@Ub#Zp0~3Ib=YFMcoKG{DwCC^NipVGrtBeW>^7m-ZG501blQKbML$OPefMHL>HSpHffJ~r9 zY>1WWHF?-F-V1O!ED z1S7$80Q=n@8OsI!IxWzGKXGG87GH;0Cq|U-z|^C*559<10D8jSTP-C}Yqk$Uj(R2pi&09wcCtdS&F z%oo{h$GPU8jX9yZd{TQy8Qo1LKhzU9qauNc5FO(e;=nz09h`k7RGe`3N3Sfyzkb92 z&PLWztr;NS#CJ!S=eXN!Z4Sf$>}aXOKjA#dJFzwGL)=JWtvxAw=ffknb}tmkLf^|h z)fc};Mp3~Y&^$ZRMt0Q2y&`q%h`+{22H=zzUE#B19>^|vWiH#~mK9Pm&Sut;1)#X* zE=d8hXnu0yX4Y2Ld5`h`G?M}W_cWf z;L;p6;h41|W}KYwYszS8A`A&ktn!>@A}7l0`ZI&BRD zja%9`BC*K)i+eoMI zHg=2dlm5%y4@4xUVw^3X7t)E*w-4R!H8t?&xLspe7?3;{NuM<$Z6j$^)g4IkaqyXn zDqf=r|D#{-uZJ`%O3VC%KH;(b)7pn@3ppPl3}6tsI&9Zs=z8A)q@**k+Q{p5o^#*L z5o%`~8J5i{c19M0=ATvFmxr*TP)bp{Jm$mvL6j5neWfJP#{@m&sA33WE-Mout;4Z} z6J6`oLBVLDtSCWA26Y%h*whu20oH2!Ex8FES(?L+rb~#=aDIT`^-Cmtbcw$*dH#&c zlVFu+_*N+1XsW#}YuYl>mQl9PfG?aZCZU}*>w`^jrnh&0aL;CF{52xLZ&<3ZmWlFS zBK%4~>cF&&2`?3fh(K5`nZko|J>bH$njb~DGV}LVNil=dw#486#4e|!_BRp&XzL;l zsM;EEX3dKdz=xubiQfV7Lfx`U-?WcaLUR1H*XSH?dn_o_g>GptJ@Rs!G43sIvs z3LF(#v8y8**e3OWzb33Okwys|XyO!MF&fH+A|I`|#AFxE9hcBfn>GC*^0>K48jX6O zx2onPKjVW=@aG*kpf7taL(g<8f#W++hFKz8>Nj%&BvzN@MNvnCFP9!^t6|=vnECrn zC&%WtH~1lV*qgNOtSz1?68_LSl{~`kt?6JK(7f!?rSQzyx=IjGS@@*R%X_*7lNaO= zdlmf;;_T}Zz%RGS4x5yf1@$CmlPAS{tV7kHb#*$iao;!F88<((K5lEBF0FSG(mE+- z(kSk&`*VvfA*w!ry!{oq4c%D;T%ZP@SPNlwXEhE=41`isosqgQ!}CERxs-}>HGPwm z{f+}J9(~Z5>l3J~R>oNjyWtu`P>*Zyzwj|3@y{4OmT;UnUCT(fn+8VWM7Afvp-=!j z*98!?P_vL*jF_x&i%DC5ucjdC>N!@tnri&b!jvI0H*?6c5@Vz$PHkab}M@?XvzfC2nury2r|IPsG$8@>%&N z1#x?rG315`Z{lwaSf9X4o2G#!989OWq7-625$@W9?_>StGaMXk(dXt>`Lo}~tcIos zh=7U!WRzC_1G5>s;tE{tPjeCE}Np;|V^slcPu}=h zGMZSJ*!IX!?n$N4u8$qsGtkv~MT+)#3H37``%gVgE634uqnqum6lF@QIdFOUHT{Up zNvrn!3=aq56Bm{%va&wq--f3PqV(mZ*d|cH=ph6iUQjQ@!oViAm#o$Yw76V8JR#N= z@Bj4z2tQ|3wOVSJ%``I&R4w!OVyEMhV`wANaZ_N3iG3wYrlR6*{o*y1knTr8LGjv= zB4Xc=sDiEG#$K!Ew_fwty0PJtI1^c}`Ks4k_JtAZ#kS-J=YQvGQ@%L z*x1u(WKpMn-l6~?*~_rM#0@S*8ppKuzWXj{v$ zrRreRRIL0OQau!j9e%pIJc!6cy|u?!#iCv%>QmXJ_%r&cmP{%Z#=8S8;COPNS;X{B ze(1;CCI0FRV3)qnj!@N}IhI`U1*lG;2{Tdf&<`s(10B4$-g-aLluj=Cc1`TQpVoO;t9uZCDwJ zJk|qmi5&*JAQ(Ff96sqy8b;eb$45KZZq^`CG3+OyzY+NpAwvl~lTwHF6h23!^xuhteJq^gILzs+do;zzNP zyVdUo2=Zy-;>tMDDW6nd)S6{>r{$W|-Qr256Y6QvIgBQ2tB}`V$(mHi1T``#;}EH1 zoD~yE6|h#Z3a-x7(U#qz0wj1uCGC38xc`wPs@DNJdl27)_474RJ7%8^%CmD{c2rLx zwpiUHI{Sg

Jk9Ml6A_-i|n8qLn37UuBQYw_6BKBC3K&cd>$X{srDdZg(RpnW$^c zxNWYekGr6TD?iO=t9}=88)1C2u+Om3aKdOWs@Rfb&sDzQlG)@k>;*D%Xuf#-N1qTx z`V?Hl2obr}oIsyKd00X@6(1pd9L&DAjYpIh+rAe)LaLy=j11Z$57Ua>{wN(m@ESQd zJ&fiv-z*EHc!~FM?}J}`Ke+J)mrW5Zl80I?q?8HlqdkaW7h+=UFNDxwXRJUr^u}z? zD=c;%ee32xvoGO87v3|PaEquZ+mlH(;xTdAQ5o^s3dw5N5OY-`-&=588l_BjAfkvo zLufNIZmL2NWmSDF9^wU$grm7e^X)*69+?&<%N#;0Cg$y@CD2o!=EqB5OcguuHJ`J% z+4vXNaXY_E1%Y9AfO^mKcY@imH3}!IcG5TuO&z8v(Z+nB; ziDN61Aa4uoqB}H+EATEeH&)Hrs(aCR-q(#yIPNn~Tshwu@uwFH!UDv!1qlpbmLoMV zEoy`AO34L;c{Elt)moJPJ5D2))Q?a#U~5ITIINAMyN#oWgSI&*x^oCwd0M=W?ga8b zEEHViwC=4THW_SC8tT9j)QlHJJ}RObP3DdsW&MF7%OmhfBnv-x20ccL%nvq28__vx zgF|*hN+YUBvQJ)Jsk?zQyi&Id`$0gUC$cD7ZG&$L=p6c#hr(tc&-v=^)!ACUma)il zr?l~CDq~##y5mCc*pE~l>fP|WC2cl~*pP7QQTo6pF-<*|!DOpQL|a`!Jy?@S4$y4h zy(E5g)TABWEb)q)Cl@xt#z}fNoc$cAVjTuqVZ@UbrQ>{s66W0{OVY8^!ut8o(*rzE zT|!a#o#$?17mh1fU|#&7$5X#f=UXiUVn_5Fk9>VoP%Uc5F0STB2ALSEqLk`Fa&j3+ zh8&fes43>F!{Y!ALW!iA2wh!*ktog4*qU7_+?5|M}?pL>wHN| zqX5u}r2PEe3X8r^pD&*t-8{LgJ_~ye;@sR*%bNdz_#insl6?9R=`2orA;)gT?bctm zn^;uXQvo(braEo~;lIqbiVv7p3G!rXQ~GRvDNhy2Wyz7zW+|3(%~ssDw`}Y7@CXpQ z+?AY4X}b~$Wj5%}F;?-Yowav=>9Wy?-~2Ki83fPuhWd$yNEm!R)LH-znP2Aen!Q;EW`!f zuzfNvm3`l%48}VtV||(&7_g}QvVepO>^a_C`J~&(%$Y3d;f}A76E!V@WKoAT^M81{ z%BU)vwo579U7~=5fOMB4p)>;0jdXXnq=2M!NsDxMcXy|BbBIHK5oq#e@AOk*EPDHl?@R7#FNHI81lCN3nKpBU?UbG@ zvj{R@1>;z}MO3ROpS`|Mg__?1zP(DJWywbVh?>E$ECz|sLgZm3ixP%%0VfYETqWo$ z2rDK!WQiE!>JmuO7^_T|5et6-chS`M{8B_Gl0S$P(L)RSeqVQm9f=W_dZZIQYAIl% zN_M%Nyqr3z>sc#HWqF~2pxqxyLy3Q^mc=>>7eh@SjUTTdR4C`pNhCGN5(+7 zRUY#B1qIO0o%*@zTXo`ZEN1%4b<;-n3ld(ZA|+4kT7U*YsNLs6I7JkYX9|?cB5=Ge z#&07P^DPithZ{I=y(Mh@kt|w@kWsCBXOOJ&TC%`5fg<;nbCHLNWpi&Ruf-Sww#Ciz zgv}<0?K8A@DM9VerI`u#O$&Dxq7vVszIxHYG~IOX0UZFB>1!eA+@8`3BYD@V4WhC~ zV?jnVg{4G=g;{hAlkU9Ycp|x(@!E1UTM{aEqGU>&iJP5Md(~a5vNDj)crdg!oydjU z>F+!%dgJ>Cur|*Yoq9)nh`S6Hwywos#1y+cM9Z>wBu1$&Q>DYoosN?+BQ5bE@Ldy> z5EF&X(~9eYjgRnCb?Xfn*PRbuH_xKVE@C$IBXZ;z33|S7_>X9zcxy2G z3A{{PulObxdj3dsbIxghq-_%m-GZ1x@oGLmg5(DBWJsN4r5{8%V5edvaTED?4 z)soRI%?;qKp-U23@}3%lzM;DHs=)-H4Oz_4k7lN*D$S_MgmR>5lp`k7$UY_GK}@>v z_-w|X^&tzRf_%7EX>TUp$&f)Iuy=7@p(RY+TQy^KSuur?p|n_H%A)ZD*tV&yzhR06 z2$K|loWaMD-SxcPdjum8ufT2dQ`5Cy$Zu$f2o&a8eQmQb=$JK&pW?b6IHR$a14xeR zwRc3u@Ze(L@U+!}sRrJ5xigr!mxt#DC9@dNETb^LoQc;ZCb-wQAy(t_JDM!GQNmvB%Rkk*aK6u}!$uUzQ+x#sxNbUQK6J z1I)>ck`1YJT?dE1eXBboAq35ntDe=b3}O?!)VF9??u%OPtj;2 zw1rwU5qy^;V$A>NTpVs{QI~ki$-rr%)xM^tqm#aw%vL1mg$1Fy8l-%5=}cVw-%_&K zHH;BHalSe39UCx*tlrrczDnKg_9U@y-jIW#JJKv|I;{aC*Aa}9^>T0KlvR^ZjVUoy zRYN1#@8<>RrR?=`^kL|Th2En#^^pr*SbWGA>XwQj?#e*$t)NR#{D_pMa<3ogu}X)K zV%>PJOJ*b!xU7dAoEVGvasxp_8U7VSJ30D0E*$6g4Y~aP!B`$;?{Hh4&NT=N*?o++ ze)04(i`p7yJn3J_8YW*DdPx58jpsD9WTrsY3lnBza2v{un(Bi8FIkLUUbd?wYwRyb zhyMt{$Et<$tA?D=Tin43o>4z1d`XwMU{58R4g`+V|RI z6INm$&<(1X{38hEd9Kf?P`|wWfkd@vH-B?$r0!7k#a(w*bzr62EV9Z5Av)Ej5G7NZ z|L!}24a^P3*OrGA115_An+^KC|INfV4e`=6<3_fSC_9HUab)ESGV7ar;dH4)L~A@b zDx35gkdCoXf9r4|2;)NFh3$U*GK=TT^jkS&8Yz)3B-q8gGqDL)F+45a^S|AoPDO?b zNfekmexYYJc;TXo!^3Hvo_P8eRJkw>PR=pE&GYCBT)n4a8F$*d{LvtgV1*uyZ4qNF zR#FeU*=xK=rP=}Tvk&O@weU?Q*u!U#vLcSMS)ul|yfJC?#|H}i$Y9;?keiwKB@*u8 zD1llO7_ll}SEJ!O12KLUbrpEsEoMB_A%uXdH`|3Xb4ikXg1$;6DeV8|njOX~%t{9* z$56wm1Fj4li~K|%%`0-4P#NZB3dI&T5~-H*n$nkcId0c&VHU;VpISenS^c-N><#3c zuw6MkY<7o!^1NI;4xhNtXp0q>PeX|YuJ^N^T)|g*aoQ;Hu6K^0060Hm5J;+!k{A@9 zls%!rsc!TrR@fV zZbzH9<$||G(4#iSk{#K*|6QD2rZR`VkM-Os9?uy#qxJVAYsxQZHRKFRhB3U8@3?QA zQVJK3W|-%RH!~A4^{B&ZiZK7P9jS>R#K0>bF85R;Sgavv2FiQoiC<14KCJRTu^+qp zd3hBq)HG>xwxAjh{R@J3$Yn#1$y>g_yXU{{(XzfV&f8$(w?#K+w=CaK;h(*nuF-)W`cHh+X7=>cmf zk{kChw0tcM{oo$5JT@}z37ERPYB#el*(cdLAvJ;{9Tm^E))Fxx2Qnk$4Hr=BU-t}K zUiPm6zKY%wVyG7XWysoKSY{W=3pR#jN*7fNYuGKap33HWO+vxmes0@r;gZG`g{k+vuvNzBxWBz z{T)JyI$~EH>DN#p&hwB9+O6OVonOvGfid5t!yc3jL(;Y0ed7|-fv~rJ_HWkPiS*5V z!|^g6-^gczW>~^q)q{dd#==-tK8b$*h{W%KEhMhbxtEyRwUjfdO<7;r%R0ng5pJ2E5L0O#SzRQ{vJJVl#C=z1ammUMan2&4@p_& zH14{4UcNP$l*cb}a1`D`%rIYp75 z>nz1wu!aZUfCzpJkY@{sJ<}ItU2n3bM8^h1eLor;aMlps$-Fza*lp9~wEL7@BEwZSegEpYl^@%=Lb3Zf%KFmAt^3(J=5s z?}^ZAFk*<_`#b@0Q}aiPzD(+lp$;Nscrg_~;62*J*K9|Tq(ypo{C*!ve6clNuR~+~ z57CqO$AJBgS@r|K^=V-RVnfV&^Mk-iHpZ+}1xCikFWP|`fgdnl_T~4!u{Q&6_d*{3 zIVhe1*v-81U~EWDYgox7A_}Mmbh;S?khY&6?-6b<7PBt$N!zi2lGsVSyDe07H%!;^ z+ni3S%;liPD{JWz}%yS4yi z_v;W7lz~b>Kx*^3p;S5yAay}Kf&H`oNcjfCsqf43(2pJTEL~S?D0Lw4%} z<>ed42%?`yUxQh7BelMMrvPc#;T9uLz(hy6t|hxborWe-C>)_|0E3yHN*w!VTjgrB%Wb;Ao=2lZ?9>XF_HRDM8s17~Hj7gXm|vgg==W z;YibU(CS~`KxZ+=ga`Z}3~SLOV?8U4jF-RYR-N0Y99bHOn(xUL`6vit!yvZD>IvVN z;P~7dUL*zN3PFFn_B?#nY^I1m{^Ey*?Q^>$qM&W%2v3bR%2{iKlA?&gK)UK&5`1jO z^6C*rP4PyN9H&4Ani0R$owZg@&k2czD=d858WLP(V9yV zAg1%ahZqdy*T1i2c2^-5lL{S8ba_avb9x+aK=G=!45_v+Vx zI(==%YUg&5pybN55U>i-QPg$z_Q(`S2Hi4@j3V~$5%Cg-xIJqKGN< zrbK@@{8d#cv>-V#PQ#HGSol-=dJ+$A3O2sQnwL=6ffXnMg?n3Pdw%9Gq#3rH8d3(V zH^w$2&j*BSQ}(V@aF4@cLUR+K%^{%iPpUQZo`geiPP9_6e~@|5@apj>*HVm>aM}3< zpq(CAZurWOR_hlrMScJXkgm5k|L|pLYW6~E1V$XqOGt06qM!D?j~)jgWGmuaM>Pg< zrC7azw8Wuo4Vv&YV==|i6cXPMSYWLOD?hx7&w6NcbK^eugG+k%#X*Kw1e1t`lczYUru8K>b*uWZLoQrTB}BnI#&}dzbM!( zvrJI%XFkb0*kbp)V6y!UI>uY@2mBtj7`jt9#i->p)liwaLu_v`2eCKi_#0ODyi_=w1$`&q-O3jt&KX`$@Z3 z!Y7#H6h^;yIv#MZ)2aR5^%x|abQNqo*;CVF}r*WXtRB!%taTHHP*%~h{qUp1>3 zk_nc=rY*rwWg1*9WOh`FU>nxuOWu*mQKHYt1dma!kCxBecqHEo`#ZKn$P#o-pG8lX_;ZI?Og%)?i;y2Y7*!d`5FR4Iy z_vm}C)Kn4*e$xb)1b;a)YIn0g+E|AS3w>#6;YZUF?38BKKY>d)J#bI^3~tnuZGvw# z&m*G;BQkm^odIAvwzNd&s)A|jxXw09MDaa(<%e5SRyPCZy#zS!yX*4Gp}EK ztp)uJhoYkl<9C>fLcCvewZ6q0tIysyEd5c_*^06j|CcTqJX=H)u0`333;lli_Uo-s zqq34szfGv)>tdX^;!CFv@Nji*H{Ft}g8JRkU zxnvmeWW?-s+3JI|F^7QC!$w+D9-bAuc5e9vWndr2!2#Cip;z|LduZXFPoRSP?k=G# zSA&G$h#s>2u#9bj9!W8%#-?!2ZW?T7bFY9s*mo6XXILFmWF?;pkNb{tAdd&;gQ8(x zeqnFMZdhoGwTW+*Pw#99O%IznS51gPaWBrH%y3YibC>}Sexdz~-?($~1nb}L+L$QO zkKdHMuOP)%md{5CY5nS$f4+G1+Ex?sX7$E&)iLzg#4B;O+WmcO^Zv8I+vyN4Mk$0! z!@u-e!`kBGx;v{_KrRdzaXe-0wuEp&)!Z*x3V z%*mPYh!yd7zh6KC?sZp{#5<8fDM}B!2zhg zf;|1y)UC)xKAHVLEI`Ql`=reH7aR?NC6f|Gw1J=1h(7o$ad1}O_sKL-<*zbf=X5K{ zymU9>vSgSqWejUaMX~+-KZ(NMZvyVGj(dWML1Yem{bM7TfzBLwaMcJN03@$GNs>B#}dd-i)g+J-IqL#9E{xE`p@Cf7_vrSGZ zYO-vFKql%iR`XMPp(dvlDJH+}&&7%xTT&0~ZY zNP9>g#(W;W%DPbljx*Ut?$`c+pX1MM8dtDNfgL&Y|4t(Iv7-)O-ky#)BU6rAzo;lk z*!vBFm6^TXwGiv2K%VN??X&}zt3>Ii_7U$CM6;Pkm?eDxQ3r((rcSd`w*AX+1MBVT zNXwE}`m!W4_`a$1PbhCY%XRg>Bmk`vT?n(sh06IiA6`_TQhTRAob+4b0B^ar7&agkaC;}PCV8op! zCrhS9>W)xR6g3*%In|(qLfm*AY$M)GzQ3E3RA{&SRJLP(H9A|yZ(-1rRk-f{5#xf& zGFbN;TsFpqin5qb9vf;dS^rVuC!|eURvOCx?Zm?OEV}%p(75W-Qh9lnX#JzO4vdjo zK*?5Es838#Se(W0$ok$ZUqJP=s|(6-cW$}gp+ULj$}5mxLQzQdGan_i5PZ1toKEcd zd#~syNuRb#YS1P50sf<>xM&AN&pEE-X+m-{cKS_B8I@I7F;`4dMa38xKI`R5D`|BF zlV*`CBYZ_+eoe*%$>rrh8DS9twvCU+uL4j~K6SjJt!J(W`$How<3< zr{c(V%TOUvBUt|HbT~4Lfd>wwJn!=c{fVv`K^?>%SqYKIl)No*Bl|ANPNd=;0?pIe z)1TycIv>B9sn`ZB{@AAF;14(=_&n9WqAZ*7s#P9>mCEcKO(ZS4dt8p0{YoH&z4RRwh#VCORD zURXR!hI-a!6G_BxKxe}Kwu8^DB@|ZUU9;dmL44>+;#pSf3$o6p;<d`gu7o9)v+$BjV!#ek|>^G$ceFe2v%R>&L@|;3G#8R>< z>@g+^d1*LaQ|bbEX9`Y&79||ZixQ-Ij*F0k)T0;J9B|lgdhNp44Et!k7G|$(HRj6N`UX>kv-WnbU9$D!JDU|L^U>w%2&=Ww6P*? z97oVt=#CKH!AU1H3g-1kQ=AlCoP0HJZ;~ZUg^X>(J9bJYMALyc#})QUG(%QVENRJw zL-{UCSO*iHY82l$?<#l%6Xs7aN?>)D7qj75ST;u{2a?U#-B9W*fJr0X};_j2_|BlRK>p2)(JY=o} zPY3lC6Su68a)$m0GsUW(JFh*@N1|YOMmrO7$&l~!RhD57=W^b5+9PxK* zOb`%0Iuf|K7Z}P^uv0@$()zJB_LPm*IE$A9`;M3P`(VBF!CU^&tkJ4m)JIX!5#ni8k6)oea!1kgovnj&sW+D!}frqI0QmGdyk^NyQnR1%h$j3VXW7 zQY-#2=|xSFpCqN?yBvYY-X-cl2umo7{sRgT;om(AZuA> zwcdhvEfQi_8z-8qg}^wfO~Ft+g!R^!nHtzb$l|wyNOL-+rkT`~! zaS2b>b=uvHMUIf!ydt_x{Ug)iTil3?@0Kz*(qSkxkd*86h0;cZY5G%BRgfvvo>$kI z5_ov?3e-r%O7f@heNTr~=A~5JLmcV2KPKE_Y zBow8_(S#+fn0>s&1OL#7y?jf18Y$w4;jwWxy%kUJ6AL3~O&w8KjbTy?$NblIl6 z#_aWeDgy13M5h@J%@>4Ba#iwfpLda^oK0oJ?;wyl=ur5iuR?KF9Zqz164-Ag?t-s}e;2RGWN;VR$8bmzIs z+y3bGnV#WTwa;IXBKzz{5?~QQ>8#<=nfrd>mcBkec$`5}LdvPh?ur3~N*V4Bq49VM zwlYtEQfAnLF*a#ST~unz9AIPziZ9tmmwY!h7Znh0{t(BmQpAJ7+i3wMt(?;_agxWm z;JE7EM5g8esu54|&rfl!l3F9uk98+%xT6Fak`r|jLd+m`hLqjTuuMGkw+`x4{)qgaBgCFV|s(5au|{ATVqo=@EnK!S}o zEjyH0K$-~}OCb>>#8>dJWj%u9R;DQWU;E?CfT7HImcFGvWs$dTqxv6y^WL4+*L^1R z`}tuKQAx8$G_w>`kgN>TUNvo({R#pk6q?`2b zqHGeq&h?Q87m7tHGw?hj3o~6E=|3!36S;-__5|t>tGE^Q7py~=ZmD4+c%3)Y&t-^& zg6p=}M^8@n%?3nrgh99IxOrksdDn6;_&WzHBeY8r+v0Ze+S;_{Z=-lfaDxg;u;RZ( zJRn~x&iB6L9%t*wU4f1E2lF+&nTbWlJljWVC*k*oyNEC+EfB91$75m3x-FmS zX_!G`=@9Sm%+wo|%KB-iF_7}%TBW?n*b85=CZ+e6*b-`Q&~_ob{K_4_37r1nNX?&f zQun(}D&odsgyIs57fbJmd%HQ)lgx-34MV`gr}@y65xVTBIG%fcBi4{rRBwQ9-@^NS zHG5TK=|84G8G=xzTwyl^Jv)!H2qA%YlS>DV^29uuD zb>$V!#TZ@PoI)+Ijyt@D1!s*GL-ZkJ_DhBx6{2bNv~eHSf9?;{F#=z}alp(luq_$*q-H-{_QpeS{a9)#0th;YB)@ogn$U_ntoZ)F2(= z==8wEaU@^!!vh(nx^XunEzy>uOEFm6?gfllh6v+i3RVi-m-~_$P7CoDp(W5sr!yuN z4mjbZoB2)dp#V_R`Fvn;x`S$yalG?6#%^t%O(F0o+)h+ihI?|xe*uG{1$k@A#%yo) ze?e{wJyXL|G0&+xmLzh&82Qln3}}DrW#MBK14<}Arbc3|gmP1!@V9T)6$<-yu&bjq z`h{b-7N^V!HlYgx0j4vNIyZZuQ6?t)34?foEnmSr;-+Y;F=@l%qJ-5k=BpnXWk|32 z<;x~loMD75ju}f z!=lM+@@VW+w4Y=xj1}wsou3>qj7s4I9iXlg(|0}?~*GS6INe{SYwGcm9R&(*_4`{!jhv4>|~v*LE>lDk_;PbK;q zi76D}xk$-}y>2fbr^X4Vj=7-A4Q7OPT*~xe&8yh1}yJwY_?l6fe!}RKmN@O8{^$hMrJ(u8G*9( z4b9--27XuTDhnzpAMO7wRM(A`WnAGgiRzj zhw(%c)-d{QyeIZqt!0+XJJ&^M5Tf~7=@ z{$OTju@P3E5A3f6{YSSkZfgNO zdfJZOBiH0zmXH(!Pj4=!oO{Np}+2}`}8+I$Tm=iY;sO|lm@m2wA#)99}w!aPAWOU!V4XI z3&_;g;cfB6GSA1ye@uS}&z`+*Nc}xL^zt#q1E41yQ0EjY=v9?`3e%xWC6hLx=qqz? zhP)?7FZD^A^(k_Wi55oAA{mX(f@pE`kw?#6a6x7M<@Z>a(*0&F09mA2<~a?x{ebpz z_TpB{p?DVo7xV&XJWa-HxA!i_wfI8awpNNH__H_!r#g#9M)ZL&{Qj|;TqAeH)_8A9 zY~Sw%8W2oprsU!T{IfU?xh6;c?mB_Letp~a$7Bk)mY~K(7hPkJYTFL5ZrT5}zg_U0 z{r@$K(6A08#;b}^jdSf6FU*8B!}40~+bkVK%dR7Yaq~Z`q8&VYK8;JN#Z~I= zV`3a@n>#HanN2UUaw){|y?eF!ZJ_4tM|j9 z@rbAUj!S_*JwH!tV%uNO_d(iBP|P(E|$36T@UchPQCUMw01UjG?G=MxHEZDG>cd# z1RYjpsX+s>nBHob+K30oU*-jBwkuZHJ=meR{L$S_e09gisKxb7eiVWM+O^=Ke~nV>hEeV$QWtS)JqxPmVj6e%yB7$ zwl-Z;QEY*;bQiwe>7=7v*(yIO(h%BM&Ckdx9c?MFt#;d+Y`0+*eJQaaS#$~XF-Pc2 zgU~^=Kn#qrrh;VJVpl&<1Dae`A1G=tF1spmFL-QmOG-1-?j& zKLN7I3pTmvdYr`0Xlt~hE(qingU}ITXs9O)=*_)6P7&bH;y=1(Q=}nhb}qgDz5r^z z3tr8jdd^@1@}aS1I`_xM?_dt4RcFokIQoEUC7!0Um);&a{5sA$@e@HA zVL*89>~v&8AXCZTU)b{^l*6sQO97NsTQV_6o31_P}vGp-Aaq&u?r1eF<~mvDSK zyM{w5(^$or8~wIr(3-Hm#HbFcZK3v;-c136Nz#1UN4gy~+*m?bxh@}A?OV7Af&6=# zj9^i%vfBU*A#cWWB#IP&RSCn-%y@O)l1_;ZVba-~ieG3o zXo_H>3)Q<6YvE^l<3Hcz?cT?sd5Y@ts0odHa$*O+*g#^Xfe|;Su;yPz8 zL3*(7_XSs1V?kr=R&l=weG9F7)qSMxw+Hl6xwHaa2ts$a@=G^qln+U#7J)#eLnX~8 zy%|QwwWn;M+^6`3t)75WL#^(S`x8mO(t;vHlA@Ox z<4wn^GQ;k@7e?A2wS#L~2T;>pV7(L5`^{gmW<6cI*L&>_WmD4n+~LeMTGt#C9VVsf zG{7dp{*LkCLVsSRs^WO$_JqI?H&+M#5?<+VEE()zV+6He6hcC_V^WCfRk&j% zqj{UgZ!zbP9tOZiR$Y#cS8KW;qe>s9#Q4QbQSGYAG2kkw?kH!U$c#jP+uC`3*fBY>L1spQ`HD+d{qRtCeQvdv<0!_keSa=+x9OGEv^)31j1lzA!PHRg3+aJS z0s+@&@|oUp!u!o-5fCq@XTVXC9?iX(*pLY@`Z9apv!wYre!)|bD$1WV>%qm?k!5X8 z!7jw_4+iw-fcGt`b$p`ox+yw>lbqwO$yZEREr6k?3zfnhR;Mm9^d|$@Tmap1>7hE# z0KlJHig~%qSPO7iiiHnwZu{(T4)Jb*kr3(lfj)RUFCbDOQdDn`Pukq%`{atzCB`f4 z-(9LfZNO-$MJ~SO#6wss`^8d$uoc^;$luDc)^sIu`<#(3h*=AEa}GI=`&}~uR0L_VB(Erob zhmp%flnC?(AKL(t`xGN@3U#@#2(XDjU^Z4qS%^;< zJbBleGnj?DeJGFYCuIn^3O?>j+%&W~ehyP8le3rm3QxIBWwj%9+o;wx!PgTW+VAmO zdZ10^_m3@qPKk>eZwX;$uRF1{#>)?GT$e1@KVrrXNW!H^kv}2YLdn6#fcgt1A{7xm zyz%IVfpUVI>Z{Bh6sL4@pA*MsVYF9%6r7HBnK32nJS`ez7mINrPrCna9m) zpAPN6)6){SrwQ$RV$-7|W?FSM46BTdOm0rHMyk?&^9a|1+6;;9-E#G!;BjD0Z@Pzy zAuN9yo*ztcA#syfJ=W;y&)dB2TDc7rlNaa5>$lsX{K)-G%eMnEScpOwO7}Bf+JA!U zGI0f&iq_;WdC~{B+j41CcGIke^D*Qt%V(tGgIM%SC_msg3Ujl}UK#aM6U*u+67YLB zC{`M%?Z}cl_sW1!2cXna5@kWPSRr<-&I+SOFB^@~o-x6o6Md{Z(*kQL#~@dlae|VZ z@NK}Zvn-+ItP*Gvy6rrj-Kva=2!BG+o#SIP0ew7Ja!%1S_S|_K;Wc(kpIcUGQ2*t| zT+Qgb0msGKl|X>>0sOoAPVu5|sLAFX9WpG=YicY%1AQ`h*4kA+hWJIxi)QshGxzjn z{-zZBBZ|mM1~rDdezr@9SJUO@)Zl@AnqqfJ;z zY?({TUF7!)sPncTy0dlNEk1>Yn8GOI{DJM1#k|G0&b`WV=tkJ?oeAykDaS%fWolc{ z(}FoA_^0+gQ!Hh*j66S6l!^<1R!<-Waqe-k5L_5s(PQ!jD!ya^j`$eX+mekHcUescO)ipls>4unAkVXA0*d73@(^Fdr{Miy zti!(Nw6w(9HA{m5tfq_~>Pjq`PWFck&9eUzGv~BGAEbVcr()F@!Bx;Og7$GY1?ByF z^VP7cj!86u1%~D{N10$d^C&zEew6RdX){YMTFcdKDY-s${+DT+Hgh6TzPKMka2u-- z1J_xwp0vQHkz#Gm4(DccRBP9Q0R229TNE?Zh2SQOQh8t>OVIHXS0nH3Uwr`Trfa3- zP%w>e=o~OU@+te}m^f8Zq_xr4vsez&0)%2);D<&4EJ4_2pwV$L+VR(ax6e z4a|gZse?FzL@!I}-W=$n8OPyqIYZgI=4O%t`vzCh`kJYa__)`W^!&p70P6(!vl3t6!Pii+9%PQi5!X6~P$e}i zBGO5|qWGyaC?u$o5lAND$f$6SJ@`7&)X1In%0!l~S1EEmg1Z zlgiLDT;ngePrg9cc;d`oCC;;cX&GXM!!(Xc9Q+pf8<`1RFBVOGWvRa%^L6%qkCwE6 z@Y@aiaHU^AvmVCX_^ggv^=sr4UT3IJvZv8bWvv%FVhduuq!`*La>Q9iv$GBS4-0^w zwypH4)_jTae)415?f$k&UGbMBbk1yviK5%|eVeIzx*W+0*tgyd=|d~CgJ9JQk0VaG zPO?Krj6-O{tEQJMmy<-78RT*?h+whcZFk2wK1IfXIlZ=*ZF8*)9w>cqz7a6VEoF(j z1``K&d$L)#KcMQKlUk}hGuB?UkQJeH~LrmY`YVUK-`3#}Q5wkYb_L@`3+hqen`VOSkZeOSGz_!sEB6 zVw0sm?=K+8PAV{g${*B;d_KSS&b$j!ha<4~B+|L#4Vuse+h$@a!K@&qNG$I-fG8;INxZy2J2f#(xlPFyj?v7@59BW|S zSct7swf}WvT2sCQoGvZlBOF1i+;U?N%dUPDV3-}2=DU(wRNsM}_gq=xPW~`$V+tRE zg6Mg5uD3@MsJEJLBVX3&H)#XloT*AGDH;obH(e6m7k>+Q`pJ|rM5NxSHhn6OQLFcw{IWGFuk>Yg{P{Ab>xi4jzrfTv zZI|rs{v9R!cI0aUPrGM_e$}sPU0xgz`yC6@Pe1g;oP?l?@yE(((%tOBES8abd15{6 zC9zu@Gs1d%Vp`k^;5oWvks6(4H728Nr5HGc_4cc&KEY*QFEfkm9faM<_md(J$wZrB z{K6T|%$|lXR4Hz_R$Ek>EgNeAnO%!X&Jcd}IwJW~$GUn{A7mMyQUh^yB3bO!tj1>N zzhIywJd4gHxry=ioDF9Q`D?jv%aWX~0*sh~NptRXEF-W%4!RfWV?`w76bH{opFQV~ z11brN7gmzHIE7+{w<&Z>Qx1-RMR1V_)mlBci(b;*@@^pt_aeSgEjc2PA z`owi8ll2bDqVfQhgyCoq-*;D+Q*+R{q#dxCsU5Q*vE;5^vpmgG7iCV2cdl72c2-Pz zy^h37Hxzrq4fA(5}H#hEN)h&iuzUM4o{nHLY!u%kh!P*;dE zR4{f|Y@|8$`aCOQ$o$7cmK&Z-?5W*M18|H1@qs38D!A9G&#c2#&apq@B`r?{So_M6 zG5-v$nUeym9?C7-*%Ct_e6k&3?oTR_gY-xJm{&u*>Zj7L!gg#M`HJSJDsiY2ET*n< zsQ3&F@*H27R_6R_=EA@|-RL0i#O$Kak*YP*T<0wG1D-dK*)n0NC2)Y0ZhHU_GQUz$ z{zEsx8K-NE)s!FRc`=u-sSq+{kaLv9cL2)|C?Eo@R*US`O;2YIzQt<0Q=H+20s5=9N5t35iH`^6uWb z(DwcKfWrQS5d+m%%$Ixpkp8dbYZ_AJgtn5*F49cTm#D)r;bS?7gkwHHKk^8?o-bZ3 z{b;zK|B6Sh9&>;1Wft4_1+T3`CHFON%@@%kMI;s$_-|8d#@!wkxDwzgN6U*{AGQ~{ zPBl*kxm#0>^s101Q=}C$f2iN33>LJH$4J&#nz(K*{F@wIo>v0ky`jjKA@6znHnBFv z2SJTy)KVVCNi7#M&y}4vI>+RF8}9lM9`Vio{<)RpVvD5vC2WULm)!#Amz#NFfkPp6 z1q4x^_T}|5_Vy=}?%+$-^`VnXdV-oWp?$qvzTxyGMS#rCU8iO^T-b!jMbdW6auDUp8XxZO%BcREeIK$`6h$tamNgx#foViGUYY9Nt9^ z|2~u|HI$oLE=L=AKYrclumT?jSJ8$o=Won4YS&*~obYJH1*qhjs&6VcK&W|l=yi9P zrvq^$9JE~7D<6)>4p1zaiE&MCbV)X(`PU$DaC%L;SZa2(@`BqU>2_Au{{3Bwj7A)k zH#vjUN}bkA1>4hQ*=%{bEk$MD7m%st$$AbR`v}+X+ztMNs<_>vGGSmJAT?Vcm#Fk_ zm6dHh>OjixwX{pNoKu^MQvP~s0Acg+I`gCR{N(as;eFVvo5_>|%$imS?qCAi5|vCe z9WR))eg2En@Lwk_EBAXi!o!GN95N7TxumT=30c>N;pgmro|-|or`7_`03o}oFxoO~ zp>5YP+rZ~3ZXrF`E{Q0MN~5;h4x+;l4l`KeL@2)Js@~iDeYGUAS2p6SEnsc`FW}H7 z@7a^vs5>{OJE|+!6nBeG{G~(PaNMJMH$<019cwhq6L=iBV9WRjHqd~$mi^gwfrI+p z!UdD0*;$I^f4r5{yT5+(^*DMA-j~gA2D;8jz9;kYH#%P!IA<15C-(n{;@EbqTX&>F zBp&hpH(*w_?$B2)5N^aYW_#)bvCl(v9kx9D0vTjkJwf=r3}>5`g@M@pmb+8V8*e?) zzT%e%u@gpma@jwJWdDwNrxUZA^}J%GE|<`OlAp?YyvU3HcNTB1doC+_j3%{&*>gwP znmj@W;AKPmAXj1?UqBHVYv>t<+W$<$aLXY|bSlbY?ts zWQCIQZdV#Y4kJ@14pYJlk`J!OpBcFg-+k_(BbF9o|3I%rDHv^Z5W*UGM5+%S6)iC$ z7oV6(3idhiDA8-Kb&~<#>&0Mm$ua-o>9|9P|B3*Qb;fqMd@v!8Qx7XmdSW(@mSNAf zbK`+yO6nk+%kgu6XG}Ke&$r!P?A;C{9Bz6KSNHS_QUp8AImu}n?g@)G^UE=~3p6{o zrW9Xx;c^^8))0Sd`TVb(kSdHQu?A`3`EPR@6|YlHYGy)Lf^beY2%jekw%GqIJGeD~ zfzFD`%#Ex*a>4c;sviK654szuZ`|mH#xx>7z9-Oz)EcvSJhE(P^dt)L z4MiPOxM~?(EH6tL&J@gvDvrpqUd|F3%^6;OcZwnRKBQ26$MCMwyYb#}==89iV`$Et zjXf%J|5oeI`Wj$SW-gzIK zUd~-`Hw06B#a$pZI5=gk_nsW;tVZs?u0Z^(=t&=XO3CnG_arra*JH_^UKI5J+8!|@ z_|J}=Z}FIqq^xk|BCp{IxFLu~msS$U7V~}UZG{ig<$-ndsx`yr2pV2wclIEuzHEJi z_G-yyLj81QjC#=!FN%u19dGrBPVNC&B&V*z zTITEg%k~`9Oj@+t?$sart6gthaw$+=s%pZkFyh$v$E_~Imu5e$zIZc3?eR#gx&rsz z`AzF}5@y+7dxS7}KEiSdCE`jCA2bPkLZR8Zy5#TRQ3$d?f06Rm-|R8ag?ohfr*xgD zhCSs#x?}b}2V`1{A5*4ezecw~r)@cc0`sQW`GLe;f{UFWxVZ!F8l^l;otHf)%$ElG zY!1g*|3}kRMpe~yU6tnf5`O5-@v64v5^8G7qBIf^!na(>Z)!LlhrA_RB!Qf0V-a!WEElE@F-09;P{oMkYhC>& zvy|RUEm?E5kk9$D7WwQR#46o1eWavsK&<^?BX_kJmKX>1&SxU}liFaEiINo}h+U#+ z;cD?_LDp+ZvVg$N{ELZCTg1E4j-A}x?{_NP#U$*y3n2xAqJjzA187l-wQXU^PXzDi zL<@+Uv+siy=@ECmmC8#$so)$@a$zaRDvl;tc-yi8`3l9Aj(SueRYS({^)I{uyV}ON zJlv*-^%0@3J~DUPk+9q{%U!hAHCj+W%F~C~w>VPmm!1+Dt*ii>_$Ou<-VH1_a8i`L zL^yB@0za3_KKopMBN)|3nx`I3%Lp|}q0Cbaod}i$7O_v)pkVbQ%FXXy9cvMylJ*+H zT;s2)LoBYdWTMw7s}`q!AA>E!;3PxjEQY@gMv$=Fx`RG7LXclNhpuzNM@afSas*7) zty+%AHgn`h;%C>H_iY}ObLJmj5eT5aJ-`GLeEBj=){+sbe5iJttD}|cdY;;sqf0u) zhwrs3Z>^X-`2YDsUAjeIs5d7k2Gj}JlSp@`_a2BQuGwgHPT`k#bhzDpFouy{f|8Ug z*#XQvC^mc#OQ!E}R^~}>e&%HrGh+rzqIG*{gdYAm%?W|r5ZhfU&;5dp!RGgbZ|duH zw$(uyCR!QHJ$WY-=cKueI7<&zu`b7_dhY(gWXm}0#14-*%@^l#oG5Tk%FE(t4(7hU z*I|9i?%F%#`!<9w!B6i9M{5kWZ<=NV-bt14vSuP*216^N=r#E+-?>xPRJtpayIuNNX#$JO78zj## zMKc}Tm?P;|WT4GZN4rAg!`Y`hak>K}sb4c}(j2GAbP(-O5$pYv0c7xv)Pv09mrOLQ zd5lhKf-idTQ(iJ$ZKx1Xp_$zr6mpD(v;a(v#1dI0g>U;*G=qMwy939PGt>Ma{bIdi zz$>-XlJ_Y2JB_u$%1u4MK>k?QDrPFBtYr5sO5(Om2h{Bi-ffYlhF|N@U#HHl($(A% z4!&q>9KH+{LmR7$nn27&Vo>tz1-^KIQ9TKi3cdfVRZ+I73<~vH!=Cs=yQ$%R56!kY zxVTFT?jkQs`lXi@?(uyL)5iDECFZk^&Ah(DD#tmPfK~XOMgtE0RO?iPATMvT-Epyl zQf*OKavMRD&z#rq+ONq2+pss3VxwARWO`^}4 z2V8LveX^=`Vb@wMv*Yo&)y&L5g(UvnG&+tYt=$YSfwz9rPsJeRVzIGk4{8b|Rhwc8 zdomGcS!1?MN(bbp&tHLK*u0YlmPAqCbAh`y@mJ1o)r&NFV2=NYp{9-nx%lDz9R^tr zaaI|PLnuSUSSB)i2(=$-WCfmm!od=)O}^L_Zx-Pn zbW-L{A%-~v;{u`pa!Iqjb+_4l&G9wov)9{l_gR{LrXO#*Vvb2VwbpwUH}bcIJn&mA z(al;_(hB(Qsm+Ghez!UJ?tmT}OS*9f-tKF(Z%Estce>L^yfGvgp6P-*D2%Ay`(%N} zF9j+BUS&_eZaLI-w>f-0!SKp_;v=Y;Bk9uG?wQ&!xbZWX3|I>{I#zH;Xh+XCw1$xw zB(rC>|II1aZM=d9CFU#vUxt{y?G)twHfkE7IN#7-6F8Zo_TmiXd@*-wIhv1#%No~y zQ4JYgJad-hOeIvC zz2u_#7fT3!Z(pj0OJ8n%@~87JysDo*^ZnnovK4v6xY>0+z5n6vny*o6mP+ZU(9v!a z*!T6lRl^|<#!WI44}Wr?$8}hHYYi6etjPQeH9tLwf9Lx2SG}D8QKPj+h#<@ayUr2< z9bwOJx4IWX?u4ijT|qFFRXB)E=JCqE4AgRywwau}uDmfKcr%yOW$r`iiSdJ77=lW8 zvw5gl&E*?Bggnn%LFfA(6!{8EEH+-h%;gsYRv3upTYnzBx-PZl;P!@h{CbChGQSO+ zpv(y$c6eNuX>X1N>_m`STpG<+F2)vCRvHFE-14wt)Hynqlr*Qv$OBVeRnZ?1`zcss z6Yzcb-I?#_KhQ@I)$QnQLtFxD9dB5UR}<#-pJ3+_{$GAGaRx&N7aKA#O5VgLZKs7^ zvLL-6xq#o`;QLq0;Id%+ocBro*^0T~x=uG=H_7nwSvwNk(N9XDmpzp*R@}7PHZUrH z#c+m<5>id$sjrv2d?Ogs-=i#pn7?h{4=Gvd{iP?TRNWXfK7>BMN)JdCcaZ{cGgYmN zb2eSHsqrBoEyFFC9&&j-GE=;GBS_inLmJdU+%@qGA9& z(1p-5ukmTa{HrHJ&k?CWxYBDJ6WHDiri27_N1l z^&Gul)YuTD>Jzr~eDKzuS!AS_gSd5*I=Kp&vpsUKfD)k$d9@JmahgS%AN@?H?CKlb zwp7L{x1LLRF8>^b8O9+KE-!}IW=8`oV%2IvC-Y>CQ2XK2U(~)-an!4{tKX|v-mzD0 zNJwc7vF_fgiizIjd06ZQR_lv;XlZ=Y@P1)yL&DGZL1G&Iz*e12@CTavjSB5iH1NN- zv-rAtzkQd^{fYROReAQE|0hM^vHc$Be$DH6r$XHLy68HVvvK$U7Zk&a%IXb;1jXvS zpxrl9-=p$0ZxiXNZmogSK0z}0#8eJLRzoZHxOqv93zKX0^+@3xscbF}M;|GPQFlG3 z;!qsEmuDP@9%!&N2@y8)4S06^`mWSBCp1faA5PnThIjiA1xu4OYxj;4@$^+_Hv$l# z8{uOArk!GVynHA=wr?(v0=ha}v`E0a+pBW#JSlO_PgEyvvpIdcE7`MXszXrWB51M& zQxZ2{?^P5^R$Jnm1Z;FtOr$IMhX)km;`kI~-qG!|I0l?ruN(KV0ch&@?7@ZSef+MN zOJiN|Afp}x110BS5aNx(OXlNHUt5oy0(!JMu_jSTM>Y9!#SAB(iE?PyN$|A^&46c*|` zmVi1wy8g&yTcR(YjlAm*zm^7X>>8E1lgv-?nVhe;SR`HH`}@2xMP2@kK(qTE1fiG_ zOqj!%gLr(`Tlz_?#+`(3q#=A(L8D0#jO>lB~pRC6k5%`TSfRaz&5jO1=R9B>ss?O#R7HW$izJ zgrQo3m_I-{BzX>wrD|!J{!N=fN`);*sQ_YrsFyXk-63hvjB?_f_tre4<41?p@msxA zG|fnR9fU9{+$`*kLpBPB0Ufjqh@V>wr zP!|j%FL4Y+F&(TlmCeQw%3>^lG1q89JVel+Rr#2Q428T71*`OYePS{V9Fo9xVHbo0 z;OH+CU>w8-OvBu1A|HT$K{kpZILt$^DftGMTHpdJjVdnxt{|@&U>Ph54bx0OYS5 z-$&J<)xQMEY~pFu(Ms82tdGuUMG@Szs zV4$lXh`O1Ni7#8Cic-Oa{iPqadt_0!RD**)8=E^MVsUqI?X_m-FS;xsW3yU>)=SaD=Rq4CpbYN3mx6O>Rm+Qd)+!aVe0wbnhJCCI`t^=F zln%2%@ae9L=NA(Hx|DSPp)>89-~mlBYqNPdnYU0?htHW|Q^}IJDSLoL5&+U+gE^Wz zf}}U_r- z*pjGPT-WmqD_Yah?=2b`y%i%9t)k8fX%oq}h>adGA&mR{HV8tTkIpoH8z_J9l;~N) zC#b$Y9XUsLc=6a0-Ro1MX*_>Z`dxBzPSklQnblpSf3GTsdhODqy(uw_14sYeW{R|O z01aUMa!ykuw7uuv38rm#hLiFi2Gk1Z7u*VrI6mkGYtCtiaRT{(9Qye>DXW)6SPF6> zq)bR&7tf`c7m6t*M~#T8bI-MphB^*55c$T@7pcoZy5ke!y!jS}dz8IEejQg_O|H%S; zL0h2UM7a4rx0A-NY;9E_;ns;G!s+9~mSH+kKfvC@^8T_wk>fJLFD>z?BIoB}a1J#! z)nS|xC$Lnf3>PsVW27n`2P-oYX+lUDWRpeOZlbIdH=j9wDhJ=L$N$so|7!uzDVz9) z@}HX#^qQl+o-5IMJqP*apFFTjN$J!p;&r%#r_F$4uFk_zFul}1t@D`wJdE3d)Z#Gv zrI`8jJ2jkn%34}d5X}z{M=>EvELtx0&l6~jDI=e{u+Nj+oy)!JEmHWO&Bm&qj%TOr z)S$kN$+F&^P`?1v(V2G1;qya$&pgk?aMsgYZU5yp(`9f`9!A#@aNVkON#(+k31DLI zS$I&I7zLvw*c1;jET0OL#Kuh>nnPe7ZqrXLgID;tK$g_CMdqR(p(#7>?8e;#=g-r< z;llGB;P0ev1|+IRGe#kq!Q?ZS(ehpCe5)TIU#8_wTFb}>Uy1$6E(}n^sbGR+wmUy8 zZ%;1J2EWN@yO{LvkgCvCvLria$&P3kT)r6EDXBPPl=I~cz;C^dKk%aH%ARf>ys$vRlM#Tjjw%HTHG3~;l?hpzl6i) zmhjapaLh(@@daHex&52RxWWq~AR=e)kMr(W9XeNfT7PJr%s@@^`| z%bG+nP2zaegr{9);2@$F?IS$d$GQ|4HvkWYz5u}zFks!B_f_k?L%i@G_4DBt9zL!K z@x@0}ug8g77qB=YNxQyLw=N}zjIo`az=ys;Sc6+bUKIMG#Gd48=xoOPOd)O`i^gy11AjsfBL0qQ1t35=`L?>|B4?nyxK%bzI`t@h zYllHH+0!O=Cxco*=%{n?pl|Bnbq)U)kfH`b@q5R&AqQdTO9T>QBhS6rhH@}PPjUFq zvD%6NI4U;hB>=V|6cU0Zgm1Ps7@9aj?om6m%L>9}tOcO;m8}HE$sfU9(^L$~g=L5{ z&B{ntg`9sFjh7;pNB3g63tJK*$=q3)^C5X7@RhQO%3V8D2>oT{)-~tUW3COTascdQ zlBav@JK4BEX6c~0tt0A3q2q$%D8YA@qChjTu=RU_Vaq_(Gq1#1h^tSa9z5`^8FeJ# zGA++$cV;0+VWU@ypQoEEdCO$^IXZt<5%l@6$@6%*!+vY+irN|nABZKDYA=5F`Pa(S zii;GbG5Py9ih#<=$?Ji{Uc&46aD%b0t_M$E%;eG0#}mojj%p>4M5|%)xgFLMocfk`=mY1w_QBU=VuTvEKUvp(G`W|3 zzPnv4le7<0JH%*p+WhF#(6?rqD*@zuL61rIHz%I$+!pF6(t|f`G6FrLXKS|MLP5#ZRRUH{`Bq2I*}N2Q5mMA3bbRF#Z7vA zWww^s#a&KLVsuW&O%41cds<$!oKmnaR`~(8Uuw~X4ii}kWroKEJTev8hX0kcrt+H{ zf5~pUb!ny93PoJMJY)HvW7d3T1^?1vyEs+9%DZRWVZy9!UeD0y(;!>ru{YvPuS&9< z>8E8=GU^|DLK61kw-2tUpt#e9SyZvZ3xh7*kj0Hd z01OR+yWYJzLu?el5Ki5-se>9&-SNLfwP8+3!MrG--Hu{;Pjz&uxMFgFX~Inm)S(FO zHR)_0Pyo{E)5WY09n65_8#%Vf-^w8bjQ*GQDFwUa9TLN;51n78N_l7;!y}J*O@-Hs@<MUs0=T^dqswYUz|TPHdFYUL29)iA9R_r6 zJP07wxM_P_=98EH<}+^i9st3dpOH+?7t=et+6}BJu+4(8c=Hl6;+0Gwi2?p{aV6i- z3nml_AwMIti(U3X<^iPC08#>M$FGmt!GQLqNBNpMzygjOpc_@2rS+v=R8z3pQ`XC2 zF5={+F-&=ivXvcM_HNZ1*lQOqsg3}yCqj^2`pgc~V?aKO%{OBfgjoPll`_&TsWWw> zA%7!$Z(tvGUF%Z?0cD|jsnLH~ZXV765PvT0y{%yd?nIG3tU(?0N{}K!xuAU|l~$=L zHoOw}S2F`WZm_GLXT7;k*nM#Ka^sEfK-}q^xI(HxH+j-pUFY<$n5q0Y%ryw^&$z68 z8IZOsT-B&Mksj@~8Rwi;OWmG*G(u;2>2qS$eN>H?*dgsMM}aSIj?+&Zqct_2H%!fu zJHy;3csGw0E4|PYW;(-QmGbr{x|xXs5)fnNtDB^ZS04@7^g>)qdTOyXf;ySa3nl6wluZP^EY~!TTVtNKkG8i2MwZ% z4*SPN>Z@uo(oq%x4v~#fG$mqh-2N_0c%6G|tLfpv!$*vwenGgqT^HJPy8HeWz09DB zk7yiAT-Me9kc%x*)O2Q_!|tr&;&gTNZV`fMop;PZ8^q|8D>p7yF@7$( zWe65c?~*z3X+xQxA>&-&Uqk$NmoNLov!^WA{kpUGeN2g>YbQkPxrvEPoeK5gKQr6g zaNivzKBsa8?CM1bvccwI@A)rxeqO8?zod^DNSBpg3hJ#?_Hl)b8Y92h-j+vOXj!*y z=3$0y4$ihy#(9}27bo`tL#HR2p?7+x{|xR;?`|x3Un^js15lSJ) ztjm1K{Q!kXFClO1Ul>wJ@r zsHhR)&l#mGFG`5??i>EwYbR}UjF}V;YW3{{BMBNAdqXt$2mG*+NJH#SZig`x%PCxX zzbgj~(-C$8YV0KXa9yl?XLwP!^BDHGus)R{})bzrbHIKna{CaTSdMG@GA zS1!G(xQRq32!05Rz247us6&y8)eR&flfLjAd-uN;-6hFOcXkwzqdezs{By495Z`dE zrXSi)G1b;ca9CU-e}Dh(_%W#{d$#3q_=PTE!utSw=rbla&6nk>82k5L1wuZ$jj1$w zxk-8SGeO~YBxqa4)m}a8(K!UT{$Bl+dE!O(VuXenAJZ6d#ra8H{&QPCf0rucX0ygyLi_9itdQRi*@EX_u!3wn$Z zCwT4=kH|B#AYkPOXE-$dH)sO1-q+{!&9jHFZk|yGb_xEJg&M7L|2e2KWr%(Mke3%( zl%90TRbe*zA%0g+mWL%sOE&wr*BZ-ImS!4R{O^F?%GHcN!6_l>_Q+a=+ONny`d08G zyBuRZKmG1L2`CsFsRQLk7h?uv1C0cF|5onM^jPTFWZC6fNw)QjD2e=@{Ex$~z_y+G zv8=m@*|E#jkL^^C(RohYn>D0^r~XAyIpyqaMD_7`-f6V%ze^=GX$wd2Gg(q9xFEVy z(k7tx8GiQZ1+0->PV-lr4$)wPX|5Ha4511YFHtas@!s6uzRyOwB6(48^4F- zJU@9OFRq*_@Q-FgM&gV4ZUO=h9)8Os4t9BpW|DKH87^d6tw+6evGce;UKo;VB z2-||!PuV&c+drLT0hoke1CpQ+QIV?uikGRmZ1C{gAFtEJKg#w<^|ecVi-}7k5e-;%V|%e6S4(Tl%XqBmoxzH;XL7VHXJ+`96kvxnU{yfW)mlx)|Sb0>$) zO6C$3s}$|x+OaHF5Z1}Bs>c3N%8$OG1QVrFDp@qpNzCy8Q%_WIY4{fr6rR3Q3awm{-$)h@r-tKzLTr13J@$_K?UUdR_JV8e zU9RHp%L^Y z?|+E>`*~R$T@0agHl8D>0tHzy^~Cs}Vz8}+xpv!Pwj|Qf5LAPVN3(XARvzn zdVIjo3y@9l#f5Bu7C68azp)6L62~s_FX;<>vmp%l z;6PT;WK!p8jI^mkpuz=Onn67gsA2(-?;=P3wNeMWY))_v7*hCSmA=t6YAy!fU8|q8 zl8ucSK$ZgTk7Bijf0J8YIgVYj&&b93YnFWXaD$%Y3a^#O1QIA`aJskZV!}5Ef~tF( z3~v@5Koe+es}%8TxL#F^k@D4YCnKj1^VjKK_-_NQtvw*>_3_5GnA7A(l5CCv2dWA0 zO6`X18O(-_^I7#lFGnAUsbz5y7!g1lnuJyw8n)eRBj__Qreuw){#(fmN|%ep-x3Wf zr_tmTBIetySzcz(Z~I&1S%vmYK)dVqgEX_&E_mke{Zkv{Jj|U(_3OnB2KJf*vZmum zcP-l*OuNQZ)f?+>fNqwscp^*Fof(ujrlCNrK6gwh z;@Psl4r;*d^WU5D2Pm;t-dZ>8|1sx8>1G~?Fr}tI1gR!*wMsW@?vnJL=$_Ns+e+Tj z>ho&%Qf_}#u=s#10R?)+;=Q1NcdJ$j#N^R=GYkfmUDeXgN;96q^|EuRy4ERQaW$HhTM1md&{J-ATRnRJ~`d?T0*NzlK zTPKYZ1@SqDA&oH`md@yRTkB2`q4y$aCh%iaA+ec!?$7}bnIth&&*S*|} zTCUIZwM^{tNC-X65P)5N%!1$Gw}TgK6M>F6T0kqxF&C^Y*W%Zu?$&?=j_D#pv9Ppz zpuM}N@U+8m9Mb<+0%!|Z-p>c4M#uuZUy6$~|KQ^4wEJ$Ar1E@Tz%Ya}bp6nRT`hi* zHd-w7K^!!TtVyn2JhdeL)P$X4uYx-$eO`0dQDanoLj(FD00{-UZ9E=%?JuHo3sZ(Bg>!Wvq>qp%K5DJw!Q6imi}qO z5TMmw*_gfBY5Kbpa!|yNH72L%ATna5zbOlvHNZ^^DNP1ZO23c9D*pxAb_(r1XY z5f~9aFE<|<^=6i5#W5<4CW5A+(1d+$P#yvzUVL$=-U`LmI`=D`p60cShnC<2SKKLf zkSEo==Gq^S+nT$*Oa~==phsg--09%4pjGEQ-14OU4wU8*-_%3761CFb?T|-3p5cFE zlF!+8l9dHLV_By^B;22y6SF0Q3bj83j+hzE7bLFMgp++y;tV+oS59L5N-Bl517Er4 zP;$cVzH_UERwc?3;qNzXW-<|sHvu|xB#*hJja{H^s}q&m#4PfAhQ>nAiTKdh2M#3% z#6NS>63br8PuWRzTg>VKdA6m@>oEN^i?t6cMw`!?G`d+K`kB23uNx@dzt--cCIY#G zzmHRdSHLWX6+YZGDWoYqok9z?)cI*q9yEvKPKx~ClLB2RTBq|k4_hui-P1zNDPSc5 zZTNJ2Sn#ywu3c_va1p8$L`sS|uZE~-n_S1oM7F! z02FWigfU;ee8rXh9er|Nt`%W-lk%GK`!=5P`*%ZcU;jd9CLuCfXBeyYXNHOG*8No%){si_U?vj{zQ9NZX4?)Q2arv4+f z_p%W66GW~nR@wXri-EuRhqzsV8Mc+_&DAt{=Sq=4Wf6&BHR6wGge?lEkRI{M_iAGA zde1)FA467VdQUbbSGe}Ygw5ssZj|CRyc|fjQHXvfCnF6Ht%M4kOp4f(c{(M*`;EZG#iOd|C0y44j8rVZfO(=2>0G3tbu4;|zyi zSA1XEO`;KUeeA9TUEAionQYw-Bff@ox}}YgO@A%oAoK+bNKP=tEF$YQAh*cR*`Yr* zASA>qj6gSeGkRKbcsjrRwUsf?`X3*e(gkI}>Epsi=hKS$>?w5rT$dR|#Wzqo0xg!` z_h)Rh_kg|narBVb^MULLk*n;w9+YJ<-ee*vj?j+z+_(XgmoZh|o) zh9Oy^PrbLle2O!IARNqP&VvPvM+Unzj&p4tASN1#*}#7e>Fe)z7}L}mvk%^gCL7?68bEK zyzTa{AC*}ObOSkngnMmfz7d_1cD$?<)r{wX^BSRRq{ZP2HyKntTaNKKIS-i z^`6KOKJkJY(efL5yTZX4zZ}-`YADj0d26U4mGsde-HIpwpwHm^7 zRIdCo#+76d9iAN+-QR8ZGPMk7F5r)PQo+z672Ye7xJ#Q|+d5C38pDB?p}Ia!QyA&o zs;vUsQ}bAjq7WZkC%I5*@>}yJK9Hghi{E`Zx1Yo(G!)vyyFD1J|F4#UAY<;q@JyeW zqwOZ3Bpre*W_}wCFMDadll##0nZ3HNW9B7q=ALn<2JTm-jLves!yGRsz6@HlW}jxF zZ;L%YAWU!OaE-ftthqO@^>aM@XW+DHG}VOXIZVDZiSm2gS8vdd8n|vVgSIUgJzd{V z82v%h)^9!RIdAbcRqoqioZQsLA{wqB2W6p+Vi-fphJH& zxO^J&-c(cVZ7i+nc6YFPhnTAIFt`M{cp~ym4MJY~kd^bq@caAwyX-%7tR7LDl_74+ z&EgjkW1rv2F_sphABwQ1+pT-vY#Ax)y*So#UmMb@sN=F?mQ-1t{N!rN#Qz7r-6QdR z5n*`9FNS)OrB=;@7F$8ov7-P)p$7}LQtIHfpDJVB27X#@l@P=!ie7S|0%9Feg#H69$pDo&rWn*qG=8`YcCu90lP~+_MTd{2CB)|;MlrRIy}*>$jWt3pYDVu) z9cXiKFx2#Kv07)qwE?q(Z|Tl}3oYf*LOvuW|3&ml%-Mh1y0?R@j5^ZK8cGaGsZYCK z*l*G0SV9RKc~QU8;48r@0oWJ-aZ3quJd=IeAeKQm;wtZ%qzYUffA#qnX@+%{1<*f^ zD*r@f+kLzHJu#nchE;+#!_d4Roo$H)YP!__6=y|ci-}tfwz?Eyb_V+3`?H!E4N&4* zN(pzhEoiOsWTX~7A2<92iz9)}stOI1_vn@>U?7*fp`?#1l=OYI>Bd=y|_b0FSsBDT< zhx{;SE6?ogv$gs=?=#2+#mG5juy9EK?+nL1q=_dnzSeyYP_Q&-7h&gvKmC2J=xl}7 zF`HTi(#@tNXFM`W-pWlPkZ1HGIV8H5#c@KWV3$jdf+{xR0D^HG8UD@sxh40?)`E9& z%n6Gq5`!o-rk)?Ic{U1&NM5ZStk+GflEr;ew|H=SgZ~woieR3Nd?@+#R(b?w@=mgT zAD^lIcVvkaNqix0`Tjjr-gx;w)CdenbZ)hX3}xYPV@1%VIB(^8xt@OS4PTiNrn=zgSsKK~Y%`_EatC23*X6@>@Pet$>n zWSl0Z9N`p(NYGz&5pHrnYg2d;$~0)yEKXLyDQVT8S%I_rsrtN!bDtDv*I}yc-=OTt z{l(QK(7~LQCCgc;fx5Yn8pTVX$`13!BCD7-MZ8;Wr;BSgI46YcYxgl3FY((y5K3FE zr49TPwN!o{WmT5G32ZqL7Mkyd!SXwf%*wFE`IuH{{;$ek&BmDgNT!s@rYU~KoAY#B zMWsJWfqT zv`*^)m3~2I-G1g+*dk5o3w-Il9NEO;tYr2FhsT@kJE<>N2lvB*sDjR4{lgK*O9^*P zc2(;4vvtLawbGF{UTo-m6(vvl>mCJ|F1~`(_-%yZmD;@g4^tC^OHCH!fCHF$psEc* zsZUB&^_$qmb9FC@^TTxcgWcbhJ$JbmFMo_|9g4~(l692JqPkqauAsbw&=iyV8zT0@ zMCSig#@gQ~x>{ibv(rUFL$ zxo@td`*B_A=AN@~IFOGKZ&#-*Act%8C-JGbD3xPm#}+C^%Yb8tLIo%c_NBAbmq_3~ zq4k`C6ZL1AXei>wDlhay=Bt4bt6}B??P!0R)u4qD`Ewv+Pu@y+CvqHLO@l`#b`zIN zI|EI~$vD{H80m2cm~8H2pbpv&b9hu$n2_Z{e1}`!X)aT`!^-un_>mZr5GSxLcn4QU zc~{}$CWd6m@zbPeY=&9N)H!y<8pb@TI8u{wlGKY@{hQSLeYP5m-Da^JM$s>q9E-l|P?F|2c!;U6iw5MYU55iSD< zfF%W*buNKKGQVT6-cOereomtF`ITGlYL(2{)w(*^&XFnsj5>ip?CZF&{JHCGubw_I z^!orx6gp3v)XG4A_{FJW+Kzdgu)_k_B2z>}YA8aIp8!0ld4|n2gA<6Zl_BfhnGf6JMA_!w{a*3O)j}IeD z&rdsJ18US}b>CvPFmm1~QMyy@xVP;$>=HMk{$cwg21|akeGg!WZ}XqXL7vM{)^8(X zrys(As|4_5FfBQBkjCHL4R14sgA3_H0-!9Yy=7R+p3UE~5*svFBmoRb*)PQ;V+J5v zkPY(;Z{K*->lggfq_Xl@MXq57dGi~3Y0+%`VB$2mP5RgKG;KeC4!2Ak#xE4WV6C<> z|9>!&SRAr};FAL1MW6Z-DeSdJin4kCkX=ZziX`7v*tQ&-I8%DCb4M4Z600@uDmQ;S z8fRVT&&<`Y1EYhE^3TYVuBs99La0G67kI@KGG@DoSlJ|JSBp&X5xV)dx{x6?sGWF_ zp!OC?XccwT?nDUA%P_TRJCiba{nAowBj|TIX0l58-0%g>x>0XeCO)2=$j6YVYz5l3 zsI`FFII^EABZ}V`_Fe|9pY%soKE7lw$)Q}9)R1jQHAN|}2wrZ7KE8X?6Kg2Y_Bjxq z(2u&p`EgNyTFhC&%P(ZfDXNR=>18&zjv^xDgS|6K8n^&&_i*t7rVwEW$Yb3aB7Va$ zemNF^;zV9 zEtDo(nd+jl_)-{uotF>Mk@U4id@XHre#Exm3Gwx4YvRxc+GP85>XEBCFaX5an!sc> zF4Q;Z)pNrMWX{Xk)XNwb;F$fA57rQn z9l5upZYqTjUwBtZHvokvAnb0zdzo3DHbrJm)9%&boj>wB0dpx&K04%ZD zq=~FE5xU(8C>Rab#5CXB^uu$MNId$?RDFwATQUjwL zY_m2Y40Ej3-{ysZ_6$#EQunCd(Z4dR#H^Z{O3&8+DQ( z0VQmlXQj@R=(6m`Q|CQFWyxv268R>%e}3Tm`P5JT3DL(Rl#{al4wJx=ZDFs8K_QoJ z&zqfAa(IWwmfZrW>d-c>4}9`}nl>u^$R1AL?jVQIX9T{ryN8)tUWcG`AJ2-OW()sH zc_cS?)EcoUJLAd24`Pv<<}tXr4<2H}E~7X+yw3g2I%;m`wVe50z=19)t*}}swC;w_ ztTpRSj0p>ES@?$sNq#KXs^%?}td^4)p|{-5V03_Yker^bQP9h=V?2|ECx<+E_;eYk zWj{DuJTLEmFQ98n|McnCdpwGKg+;Z=@bTDO>d;fHD1)X8(wd>v0-<$5I82HLz4lC} zz9t7jXDj-?QN06-R{nG_#ZB+ZHG2siMaU*=gW>H)#emQJdL)E+JBALjx+TD+;MVFQ z%0!~zsCZj0%^$zL1?}v(OdYLr3twNi{`zng|c`Q=^F9JQVOo2v5%w{5 zuSy=f_L{l$A-iy##@Ix-qRaG7fB$%oUZk4z^wd7FaPJ}86nM}FYxSo4g|X+=P34H& zx8z(R@(){cw6L@}>^BqaIDhKcm>8VNX+FlG%aF3YY1WE^@Nw>o&l)_FwYUn$nbUDg zMbIaFnSiHIR?&0O?wPBoS^c_m?!X?7zkHKEjuL)jR#kGVBSBq%xYB8)(jQA&fL@N&3N)0r`%)?OCVBE^t z>{*jK^1*O+RCrA4CilmX+=iI&tTr`Pu3+zeD4@giTjmhCW^uaT!s{vv?{t?Pr^XHt zvVqfht{>9xmtH^yX-w{@>N4uG;apqj*0xCv)@9IJ!;hDRt!k5ZBWC z9|OD>sR-X_ASF(mTdKI9baBHDlVok4FYqXeeO?9$SpL2qji0f(`K_+$gh2m+(ftfL zD&&68BdR7)?4{{eml>0XIG&mND7oyYa)cQE$OozfNu?^y&vuP_6OLF3#8i~Ca|prQ z7Rj|eM;<+5QN%S};Yu}ZGA2@yb+HHD7}!`T^{^^eri+YV`eeK7Y%#SOrlX#@TgO?~rK0tC7~y>rRCn@^ zBLBj%-Ih4-X#w&i2S#KxBmRr=ILD*!Y9`$#SS>(lBh~F6p$0zsNTiilirJZF9yiw) zDVE{meTRSpGxDjobg+$>D(A)%9r+!7kg}rh#B|{5uaJ+-A`Q+$(p?d!2e>;V(D`Uv zX)YfbRCr70(Z&vNM9O{e&<=d9(+zK*>rgoBT4!YbtrkV=Bw+5eA)nq>QrS)J`jd!U zEjMQ>MkCXcaC+ONdHF0#8k4;rqGd-xk|J7 zDn%dW!Snu8BG-(C`J*IVmGA*h=2$2`O+a1n@AtA4^1O@r6}E;49r%FMNNsBirCPqF zP*}cWj})@>lzZhLWHbJx$%i8JiQCLb0!ry_<{E<}3@j3k97~N?$i&u!180TNrR@P# zC7*A`FM>b3@Aa>X0;-r6Pcfg}7us)T7oL01A#NFMiMkLq%8R&BAO}==J?5deFaF=4 z9{JT4q^%YVeAtKCTxN`b54c@<@hd;%)3@4S%?|>tKTbvezX*YVDA%}3fjkt%hL92v ztsDFnPU~1HJ8AlM{bU5w1b>ZU^D?UN_4y)&KUI6S4`&czPzb8{#5%8lrLL}N_xROo za#0nw_u!BKp5g`m9Ivn^x%bR^GontMj++0prNCv+HcvP6xD$ye7d#kRx;P#_ZDcaV z#fd=>rg&Y&TfD3hDbNp`4sW%+!aBE5yehePCELKs=xUBKBv*AY%bEh#CWK5v-)!1#r{y~_xpN!@=l))d_#$?rksQuY_%XuIN;-; z`TW1|ibm8%usjc++i&p9o%Et4l~Qhb*^`1uDmH>*-f5Qc>dBs|$T;lx!l&fN(|OS7 zV}Os$g|eQpYTB>hjJ}6*T7TDWFjiH4=0Z1t#S0GgcfjP9^W%lLwS_;+SI>sdDXsep~7;-+{dS5-dL8=7>Er$dV zFTa@INI`)qz$w?iDzBM5dhaNef3;Ku%|kNfwz1M3`R6;kDj0i?YOzQn&sKWTK3}S6 z0RC*o(-Fll{{{Fxp3F4S-34iudAa_Pf>XT68iC0mf#FgA3VJdhaY3RdODI5&-=+@} zEOGn<$n-maRoJ?^1K^719CmUlpJIz^U{{@#Ac2v$2RFN@;2MOW^yBk!2LbLLN9Y5{ zGexjRS8nos!2c~M2Iy=tC~_=ug}u_-0Ydgv34IseKRAs)Z*Pe2xUSaA&JCTDcC{9| zd)u3m{^T{{<9~f6j)jNX-5lh0>cGTW=M!OCn2?8Y2ua zoOD^rYyW!u&8y~D*VuPzr^`~dTO1(~J+tSvGTwU&c-rR}D&vzSj|5iipY{PdCM>kP>=4qBTCPsElGfGOwXQdiy%ZoB0^TSWt z_OCG$6Uh{)r(Ikewzr0BBEuO6x7YCo$55_b4LDw67i? zy5Jc6>nB46zD>Lu{Ixn_vRc>kO+i;R>Z4g`Zbl|v+lldKB_t2HpE*L?@b@cf4R(Yr zMil4azN0X{jGmS-L+>$+#=S2f7#_Mk;Vc@#7FvRqzoBT`cCbBct2Ww zyelP=@!xvWyxz<$_+fLO5V%Lo$nK+)(ct?yCHj(#vY z>OT*c54S?wbp)sP>A-h2rT;a~viM5=)apO`G2CS70SWLx4pZ%AS$B=r>W|}JeSFg| z`{s8&3Zn*}oH>ny5-A_oUt99wO|dJZA0mV5!*;Xz^KEMGdFj!5Zy?^wU?fq~TPO4+ z(e*#u<+(0i49RUxA+(QnFvC8Uy~-?qAdAa34KKiG>n+aORD$5P;nnz_-w6G8mK(GQN z&8}w^x?C=tM_ekn>N%ohnUUZ4O=$=E%Q{!9;FZu>Nw>#meJV`scKvFR))d$gDEQ82 z;Ulmp3u~(k7B6%4=k-|-E}->i>ylg&b$bDEJ)UcPQ37CHz()4R*w70`{S80F+wA0K zAgiW`6<<1sha=<@cntNtd^BSKNHX2ixV`g}H+y9zsnJqam%LKguOCkhXki-oQeJqs z#|)?0rU-2}eD4k|iTMaAEo8Br+X-YQ;86mfU%1cbwW80V^YLkZ^zvzOq>AXhu-wjh z+w5Qff6KQ8M0*K;G}foe#Et_$0K4HXd~2RQsVk$HML9gv{(u-C?k*U z2Ymp(C+!n#U=O!xiz-fUO3EYwUw^*okf@ z2CY8Zbw;_xbBrZUMFuLxLJS7)OHp7)$IiO&6Z~Yptv#aVD=TX=EbQ|L`7ZfCk8^?g z3bvRH@cVBnwhwth{nSa`-s%sKl!}KteVzS>b?q!a`7*b|cc5slKB2{6XUGvG4qw09?q*Z%#-r{QyQs0t*|C|1iOE zq14Lbm7qer?t) zq!lazbZ<#9rN%EDv3qQ=1S5g3CP<#d3q;1dF7f&j)w(#amC-mIm&8kR6FdQqNWhT1 zsRjN>ngIqIGecd;d|4-qbY4)*2^MhEAk;m|JYeXkNxR!|mA%5QJu1&VJCS`MrXj{O zC(Ut|(icIr_nK+xgDe2)^s||G*a$&1>z(hdG@1*3BL?bYDaiMqG1h|eQOh5qGvNW2 zvy_;xoxU4h8#(T%ijK*y^sSZZuHot;VI;5ITBzD|=xNPU`VBf%G8~n=BI<6gzSm#A zPvU*+1c3GjP$qQJE3#~fKSUP!8&>2m5+;US&3U99^BWNF~|8APoT0S2Df> zc8Dri-?YC+8c+APbEN+)dolhcq3$|Vf1i&Vob1XFZ)#ftq|VUvQeqoXLYa1J{R?iD=OvA6LzI73D64rx|IA(Py;-HP%~WF(y9(iBaicx$ zFX#u%Fl*T7w6gpr&}rc;afUZfMz9S^{`D$VYHbd^HpPeXtBGNKCA0Plc<0hAsreeG zKQ=3z=RsPkTXL}TW2;$%TEe<{CZs0pKy`qGPa~KoI8~|)hJ~xkze}uU2KA87Z-bt- zx^F%be2KM*8(QCk(k4TqLSwuExd2{zOAawmPY;;dSE0m!?I_DUM8@$Pu${bmU*W#` zH+Ow+Ek)AEivW?MUn|XHfyd8E@RiI<$#Qz~NlYO&U`cGmSRr#B5gO6``L42-r{z@d zgSQzeVq41#Ro}1^zx8fEI}lGGP^e&KW^V@&GCmi{0PFMxE9{Z{=6dT!wrS~w7sG`f zAgWUmB`V$rlg{`q+L$!h;Q%1nk>l6T-j|(TdcP4SWI5CRd$$FZF_x4y!g>s|j12uh zLIeZ)x;~M0eqGRX@6`L#+dIp~DiXIi!iI^-F=SlSqWzl=tE{wOrQ_i)gbeLmR(cHk z4GY8FwMC$h%eJVoEF;CQIA1EeEew=gRGBYRWUuImC3EK9zm<{Yj}!%lTj+^=Pc{TO z^Q(CUcM-BOP{TB(Tr9D=H1H8Mn=|5x$7yy}q}RdKQ+{v zMD$Ip!)eg3ydS&%lFQNdc4uKCd2&Y__ipHP)V|p2nT6P5ony14dGU!{|F(S$>1=18 zLUM(--NlzT_!pwcFr`rU-sm|e0+S4&wo7T01=@fPtwRb-xmBGNlPrg?8zM2+pHphG zY6j3g@4Ved%1Tnw44~KVVv-fBHccQfo)o5RqewQZiVrU;DkzeqNfL_MO(57BxB+rU zv`o;py!C~Te=T0-cilg!{lQ&`a+WX$$az3ahFU3egkoGLVEHJjnDt$aM-){1-?iCl z%PRG7MBuW!#q`1B|LJH{p-iDOqj+oBi!1 zl6R6;ehS0w%oD$x~)HJ0a}+o}VeU6rnMvsIQ~`myG2!cu{5V~09*M;C+CNV+V4 zKu?H`;ExX$`uI5MQF7{<$P$P?Y(#E^a^n~!hot1~uOeP*iqZoWB7@v>G&U@Q5Wz*0=7BR7$#mnI}FQX_Y9qi^t1>!A; zbzp=XuEcM5A6igL%Md=Rk0@sP3|TV4Sc(&8z{c=2(iZZG-T1kfh|(&iC%xv-Huo6-5y%vrncYcfdWoP-dl^a z&@}Yt;frTU(l8`49SEDg?9>|Ahj{5%C5@Gc?>W#GF(<;fUc16YKcF8XR{t&2iXGG& ztOD=iGjoRlhBrQt3B3-br_I`GWush-`*)3&!@~5}ggBHmludAP{c82NT&W9nSVTNM z{rC*TSeE?nA>&`XX{sJ<+IHKbjQM;z&@A*;>cJ%c z(*hKub%fQu`0hr+ErSm))4F!G#I%FY8`J1O2gR5Sgvec{pU+3k_JPXCRuuW(8OpFR z;}1%sbwaS98HMMG!Z^$JG(T|ZhD1>nPBT;8o=bO&W^DV4o!pG-AUv#R<&VsLR!5Ly z6~3a%nai-z3@@i**xTT8J(rdf#- ztim=Sa>;zPCg#S2!+&@Y3-oSgqGkYki1o4Kqi7CkbMgXdqq|oh(6S8(nhB}K3egzu zl9Z^Dy3R?J#-9g(<_(l}zbz!eC~%O6YdTqlT1kqm%bpw8{l`V?TkSp4t4>YUVlhu4 zx@^K3TnoIety{7tspEjAelS0fz<=)lZw{H2=;SBOC3qOYg z^NJmvR8s(q3!N@d%Vj6BJ;!w*kpgQ5tYpSHne(i6A0S=Lf_fSJuE+0D5P(coB0|budpdZ5w*<(v zR#Ms6x`qQ6|$rYG?#zv6hx8FGCw@j;zf}v=V*UC?$Yn8oJ>aE>j&#Nfr5q{LKVDJ%*nrg+hI06 z3midHGA63>ZO(`SQ$`+W!oWS(1-9bj=gAc2OB#OW%0M@R)5K(@^54+L;(;UEPwA<{ zMQi%>^fa$TGud%+#t!m)^uP9@;AfD(&7dRoTghCB6rE@&tc&wVO6s@cXecOv4|5KT z*n2`w!R|=G+wK^h={))nOqb%D0l#I)wR+$nvNd#RjT0phfU>nA$1kf81ow_O=IsoF z3i@{s(Qjn@P+J=vq};3GGoib8e#ht9IJ`2e98AphDsi4nEJX6;sovNW1-?S@bcDh84nEm!g;?xrA$B+YM<8rR4wykK zoUwphboQcHYo{qvAB|neAe)JTi?X0)w_i~NG||sZPRJXv#H$`R#okjTcdC|}Z=h`* z7)d|MxqPTavL-Mbug^QulLvz7q^Gf=PhD>tu?c+)?nES)RD{lWho3tjW#tgqtjYHJ zH1Hl8a)fvU;)%*vG`u%t=rZ}IyR^MM4mxB3#TQdK zXau1#Y?O%LT}wf<-_cwgm|bGBkKaZ!MF7Pw_$VNhbv1FDyPENGEIHKOf-_zNxqXJg zrSdGETXgGJF#Hy1>kUR1Jqnr{L-U%G0AJjQjo&^Jnzd4VB@a-o_gA%G*Evi)#+bd& z;Kr?3AnDLU_>S5-y@P?Bn(31X_a;9bwi-2pp^`CUm52WpKU)|fS=adbmeJYl^9}Kf zA|jh5Oj#gwA}Y(?Eu&!UuEYJqB=Xm<6qMHu2wGq-kouuT$6g)tA0GE#4@PHm{f)#y zX>7dy?n0o%i;3Q?Rsiy)uW){#A?8Tbo4EXhhXe7WR98P)tt<`QO(b#cm{ za~KIBCq75Z4zns0Uji7s+*8d$Qr+rK8A^#y&&IR09#uf+H zD!Abg&?o|2L;5ICTc|Y?Jx;a8Xs)0sH`FhR5W{E%qr&hrkSy$6J5`xZE@=;zH9J?H zx5vk@F#wN4Ftc<0fU0OGSMdRicqpd@iei`Q1CMzDOyA)y5GiwaXJq#8H)YW}x(&au zR)2_1L3H4-eR|22wgakq&@Pax{&+i!nc-o@PLUk)(Z_#{9Xq=KA!U5xP&Md-u$CZjupA(D9Wf&@LqZYXvW4yO!G(EWr48F2hJ(REbP;h z-~QU4)P*8=*E!Kjl*g01xs_j-w?Ib1H14P7vhLM<-u|{?WWi?Mhg3LBNmHHwT!C(& z`xH-mJ0mTwC=ycjm_ZdCw;d?SkME6RZ&uj9&xwz8%GGlOB{*)g9coT>5{i_bjQz8W zFS<2W4|~u_G-9VXn?{$VH`VUg16z0fysd&FOJ-k zQaSO9Fvvb1?GjSK0fn4Gw$r_KjvK+szQXy)q%}A4f%GrDVuJzMfb=YFOfgL~6vi z9*7H;wIlDmC=hG4YSP6Uk3S1$0IscDmB^T%JfM>pMLNTjNT54dm1&BgcA*AHg>(N% zwu#XCk+3BdY~u!1Qr(lTvqvT6?c4Ql5!Qck%26`0U6Rb1JwkV zkrzsQ1#|Nd@Xvd->`Bx(Xio`ccZ0ocV5dG7tMA23!_r@Znyz-9DhdQ_psBQv-_#$h zLIncNH()SMbyqmR>remw0x1?K%{xH81iRd5Y?;m;SVG>217o|kMm~VjV2GkV#9~kk znqulGhZD{K)&N6WJ(#6Wf;pu-&8kmv7s%!_!90ulsWm!`zHT702PdESH-)aA9XuTo z>h_Olv0eTk9=asr4Hq%}C0)Y_jp_xDbT@Yw6bPqr+tKipjLnfb7s;u{zm~KELHf2S zvtj0@F$wwHURlQ!?(fSx7+E|PKt9}A5;fYXOcmMDJ6W>|7%lf4#{XvfG4g(n<$o*`ouCspfmBc=6o5M6>QILBGuQQbU zD3_xLYNaW@SJqKUAGcy9wC4ujc>Y#hZuuX}e}x7)=pWnn2rZr1!}86wDY9D$9X;oTVEw*Gl+&C_w%56z2_K z0?B3d+tBZ7?|?!aMBkzNpF;xzeva12Y|nNfF&=_tRJbmL2|H;kyBcX*r|sH&a~@j} zG?;Rgmj)Kp-WDgcm%RU))pAYK7-7yNmI%|58 z)KBp^B7QGL2G8AeuxXcjPbbv~KkR2zx}TMnqK=LdQo0uTVBUY4bZu&ifD}jkOPbb311baWfDxFUyw!hy&{yZTHzrMlQ#qdy}ZPzC=6=cg?U3{hV8M9#pM zwpN_X59uS~&ptu_fL^?uS!J}l zs~z}%x{*|VdUmZ5@k@1n1&rS`T0 zkej*oRrJ&SCtb*?Hr#<7&!oy6Vfky}-salntc@Ec;PC>1cZE~Dl{Nb{>NgxNM>-?U zOghA-zMsZl6&MoOKJJYzP||$;Zq(7Cw}T&GD0#k_mqChb)ii6U&{CI*MSJLGxGSjDh$@AX9!=6yR%lzqJ z$TxsdVg?fg6Bn1V==_(^&xQw}&y3~p=J)zu3zyY+N1uIWq4}^qk2|aH?*Cx9)=2D^ zkCuLg3^uCK|GTWeoItGuxCO{7l_t(9O&3R>y5@zjCbXy0c(fZ z3=%%>0(0<`MUU1NtZs=@xDrnQNE^nSZn#@YbfSP_wspY~X0LEB0dhAE`;p<-o{*G` zo2y}^CC!lhX$RR}&(mAV#?uqp6Q#7|6JQhTH0^ErzWA{U0l-{NL|T2J%_`sIIlW+D zx)`59YONW>FXjrB+kb#Kzk7qR)qIl<&ER!f>xEj`qUZbZ4l3dKppQL@1r(SXaS


oYSx0Ow$4 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 Date: Sun, 18 Feb 2024 17:52:39 +0300 Subject: [PATCH 03/60] Fix code style --- .../vk/itmo/test/tuzikovalexandr/ServerImpl.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 1fe7bfb18..6e1a76c46 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -1,6 +1,13 @@ package ru.vk.itmo.test.tuzikovalexandr; -import one.nio.http.*; +import one.nio.http.HttpServer; +import one.nio.http.HttpServerConfig; +import one.nio.http.HttpSession; +import one.nio.http.Path; +import one.nio.http.Param; +import one.nio.http.RequestMethod; +import one.nio.http.Request; +import one.nio.http.Response; import one.nio.server.AcceptorConfig; import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.BaseEntry; @@ -42,11 +49,11 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti @Override public void handleDefault(Request request, HttpSession session) throws IOException { Response response; - if (!Arrays.asList(METHODS).contains(request.getMethodName())) { - response = new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); + if (Arrays.asList(METHODS).contains(request.getMethodName())) { + response = new Response(Response.BAD_REQUEST, Response.EMPTY); } else { - response = new Response(Response.BAD_REQUEST, Response.EMPTY); + response = new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); } session.sendResponse(response); } From b3f580931cfb9ac113381adfe15a0ee1fa0076be Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Sun, 18 Feb 2024 17:57:36 +0300 Subject: [PATCH 04/60] Fix code style --- .../java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 6e1a76c46..e3caba7c9 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -3,10 +3,10 @@ import one.nio.http.HttpServer; import one.nio.http.HttpServerConfig; import one.nio.http.HttpSession; -import one.nio.http.Path; import one.nio.http.Param; -import one.nio.http.RequestMethod; +import one.nio.http.Path; import one.nio.http.Request; +import one.nio.http.RequestMethod; import one.nio.http.Response; import one.nio.server.AcceptorConfig; import ru.vk.itmo.ServiceConfig; @@ -22,7 +22,7 @@ public class ServerImpl extends HttpServer { - private Dao dao; + private final Dao dao; static final String[] METHODS = new String[]{"GET", "PUT", "DELETE"}; public ServerImpl(ServiceConfig config, Dao dao) throws IOException { From a13a743a1ab15b8eaf3648112af04eacebd0337d Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Sun, 18 Feb 2024 18:03:18 +0300 Subject: [PATCH 05/60] Fix code style --- src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java | 4 ++++ src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index e6cb72442..7d0dc8c52 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -11,6 +11,10 @@ public class Server { + private Server() { + + } + public static void main(String[] args) throws IOException { Dao dao = new ReferenceDao(new Config(Files.createTempDirectory("data"), 64)); ServerImpl server = new ServerImpl(new ServiceConfig( diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index e3caba7c9..965527f32 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -51,8 +51,7 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti Response response; if (Arrays.asList(METHODS).contains(request.getMethodName())) { response = new Response(Response.BAD_REQUEST, Response.EMPTY); - } - else { + } else { response = new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); } session.sendResponse(response); From da4295154dfe991b3255ed206694bd8070fb639d Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Sun, 18 Feb 2024 18:04:09 +0300 Subject: [PATCH 06/60] Fix code style --- src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index 7d0dc8c52..12aa37b92 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -9,7 +9,7 @@ import java.nio.file.Files; import java.util.List; -public class Server { +public final class Server { private Server() { From 0029cbd6a686e3f96027ef310ac725ee8c762559 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 21 Feb 2024 17:55:00 +0300 Subject: [PATCH 07/60] Add report --- .../vk/itmo/test/tuzikovalexandr/Server.java | 3 +- .../itmo/test/tuzikovalexandr/ServerImpl.java | 5 - .../tuzikovalexandr/results/get_histogram.png | Bin 68047 -> 0 bytes .../results/get_profiler_30s_10000.png | Bin 194073 -> 0 bytes .../tuzikovalexandr/results/put_histogram.png | Bin 68396 -> 0 bytes .../results/put_profiler_30s_10000.png | Bin 191207 -> 0 bytes .../results/put_result_10s_500.txt | 90 - .../results/put_result_30s_10000.txt | 111 -- .../{ => stage1}/get_result_10s_500.txt | 0 .../{ => stage1}/get_result_30s_10000.txt | 0 .../get_result_30s_25000.txt} | 0 .../results/stage1/get_result_30s_3000.txt | 0 .../stage1/put-profile-10000-alloc.html | 481 +++++ .../results/stage1/put-profile-10000-cpu.html | 1616 +++++++++++++++++ .../stage1/put-profile-3000-alloc.html | 450 +++++ .../results/stage1/put-profile-3000-cpu.html | 697 +++++++ .../results/stage1/put_result_10s_500.txt | 90 + .../results/stage1/put_result_30s_10000.txt | 105 ++ .../results/stage1/put_result_30s_25000.txt | 106 ++ .../results/stage1/put_result_30s_3000.txt | 100 + .../tuzikovalexandr/scripts/getRequests.lua | 11 +- .../tuzikovalexandr/scripts/putRequests.lua | 6 +- 22 files changed, 3655 insertions(+), 216 deletions(-) delete mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/get_histogram.png delete mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/get_profiler_30s_10000.png delete mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_histogram.png delete mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_profiler_30s_10000.png delete mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_result_10s_500.txt delete mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_result_30s_10000.txt rename src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/{ => stage1}/get_result_10s_500.txt (100%) rename src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/{ => stage1}/get_result_30s_10000.txt (100%) rename src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/{report.md => stage1/get_result_30s_25000.txt} (100%) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_3000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-10000-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-10000-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-3000-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-3000-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_10s_500.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_10000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_25000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_3000.txt diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index 12aa37b92..e126d9ee7 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -16,7 +16,8 @@ private Server() { } public static void main(String[] args) throws IOException { - Dao dao = new ReferenceDao(new Config(Files.createTempDirectory("data"), 64)); + int flushThresholdBytes = 2 << 16; + Dao dao = new ReferenceDao(new Config(Files.createTempDirectory("data"), flushThresholdBytes)); ServerImpl server = new ServerImpl(new ServiceConfig( 8080, "http://localhost", List.of("http://localhost"), diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 965527f32..3adb040eb 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -41,11 +41,6 @@ private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) return serverConfig; } - @Override - public void handleRequest(Request request, HttpSession session) throws IOException { - super.handleRequest(request, session); - } - @Override public void handleDefault(Request request, HttpSession session) throws IOException { Response response; diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/get_histogram.png b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/get_histogram.png deleted file mode 100644 index 012687da97caff5d3bda161b75c8842f332af055..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68047 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%0D*gENw{Yi9}kYjjw%JH#sOiYEBE%ajB1n(cS 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�$_R0DN76M*+ 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 diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_profiler_30s_10000.png b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/put_profiler_30s_10000.png deleted file mode 100644 index f1e66636c709c59a0f04876ae6f3691f50386f4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191207 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
oYSx0Ow$4 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 + + + + + + +

Flame Graph

+
  
+
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-10000-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-10000-cpu.html new file mode 100644 index 000000000..d76aa9822 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-10000-cpu.html @@ -0,0 +1,1616 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-3000-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-3000-alloc.html new file mode 100644 index 000000000..8b250a4c6 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-3000-alloc.html @@ -0,0 +1,450 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-3000-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-3000-cpu.html new file mode 100644 index 000000000..785041f00 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put-profile-3000-cpu.html @@ -0,0 +1,697 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_10s_500.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_10s_500.txt new file mode 100644 index 000000000..01b8570b0 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_10s_500.txt @@ -0,0 +1,90 @@ +Running 10s test @ http://localhost:8080 + 1 threads and 1 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 5.80ms 13.54ms 166.66ms 95.47% + Req/Sec -nan -nan 0.00 0.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 2.50ms + 75.000% 5.01ms + 90.000% 11.49ms + 99.000% 73.47ms + 99.900% 157.70ms + 99.990% 166.78ms + 99.999% 166.78ms +100.000% 166.78ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.039 0.000000 1 1.00 + 0.961 0.100000 501 1.11 + 1.310 0.200000 999 1.25 + 1.633 0.300000 1501 1.43 + 2.013 0.400000 1998 1.67 + 2.503 0.500000 2497 2.00 + 2.721 0.550000 2750 2.22 + 3.017 0.600000 2998 2.50 + 3.431 0.650000 3246 2.86 + 4.191 0.700000 3498 3.33 + 5.007 0.750000 3746 4.00 + 5.611 0.775000 3871 4.44 + 6.511 0.800000 3996 5.00 + 7.311 0.825000 4120 5.71 + 8.343 0.850000 4245 6.67 + 9.567 0.875000 4369 8.00 + 10.559 0.887500 4432 8.89 + 11.487 0.900000 4494 10.00 + 12.703 0.912500 4557 11.43 + 13.983 0.925000 4619 13.33 + 15.783 0.937500 4681 16.00 + 16.927 0.943750 4714 17.78 + 18.319 0.950000 4744 20.00 + 19.791 0.956250 4775 22.86 + 21.391 0.962500 4806 26.67 + 23.679 0.968750 4837 32.00 + 25.423 0.971875 4853 35.56 + 27.711 0.975000 4869 40.00 + 29.871 0.978125 4884 45.71 + 35.007 0.981250 4900 53.33 + 39.039 0.984375 4915 64.00 + 43.071 0.985938 4923 71.11 + 52.863 0.987500 4931 80.00 + 68.223 0.989062 4939 91.43 + 81.215 0.990625 4947 106.67 + 94.975 0.992188 4954 128.00 + 101.247 0.992969 4958 142.22 + 108.543 0.993750 4962 160.00 + 116.287 0.994531 4966 182.86 + 124.159 0.995313 4970 213.33 + 131.967 0.996094 4974 256.00 + 135.935 0.996484 4976 284.44 + 139.903 0.996875 4978 320.00 + 143.743 0.997266 4980 365.71 + 145.919 0.997656 4982 426.67 + 149.759 0.998047 4984 512.00 + 151.807 0.998242 4985 568.89 + 153.727 0.998437 4986 640.00 + 155.647 0.998633 4987 731.43 + 157.695 0.998828 4988 853.33 + 159.615 0.999023 4989 1024.00 + 159.615 0.999121 4989 1137.78 + 161.535 0.999219 4990 1280.00 + 161.535 0.999316 4990 1462.86 + 163.455 0.999414 4991 1706.67 + 163.455 0.999512 4991 2048.00 + 163.455 0.999561 4991 2275.56 + 164.863 0.999609 4992 2560.00 + 164.863 0.999658 4992 2925.71 + 164.863 0.999707 4992 3413.33 + 164.863 0.999756 4992 4096.00 + 164.863 0.999780 4992 4551.11 + 166.783 0.999805 4993 5120.00 + 166.783 1.000000 4993 inf +#[Mean = 5.803, StdDeviation = 13.544] +#[Max = 166.656, Total count = 4993] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 4994 requests in 9.98s, 326.76KB read +Requests/sec: 500.54 +Transfer/sec: 32.75KB + diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_10000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_10000.txt new file mode 100644 index 000000000..424ccd427 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_10000.txt @@ -0,0 +1,105 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 40.641ms, rate sampling interval: 214ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 82.57ms 148.55ms 804.86ms 88.99% + Req/Sec 9.97k 4.41k 29.74k 76.34% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 22.91ms + 75.000% 80.83ms + 90.000% 249.98ms + 99.000% 710.66ms + 99.900% 794.62ms + 99.990% 804.35ms + 99.999% 805.38ms +100.000% 805.38ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.023 0.000000 1 1.00 + 1.114 0.100000 19889 1.11 + 2.057 0.200000 39751 1.25 + 3.281 0.300000 59631 1.43 + 9.407 0.400000 79503 1.67 + 22.911 0.500000 99370 2.00 + 30.767 0.550000 109306 2.22 + 39.903 0.600000 119255 2.50 + 50.143 0.650000 129192 2.86 + 63.231 0.700000 139122 3.33 + 80.831 0.750000 149080 4.00 + 94.143 0.775000 154024 4.44 + 109.695 0.800000 158999 5.00 + 131.839 0.825000 163965 5.71 + 163.327 0.850000 168931 6.67 + 205.951 0.875000 173898 8.00 + 226.559 0.887500 176392 8.89 + 249.983 0.900000 178865 10.00 + 272.639 0.912500 181352 11.43 + 296.447 0.925000 183842 13.33 + 327.935 0.937500 186332 16.00 + 368.127 0.943750 187559 17.78 + 433.919 0.950000 188806 20.00 + 489.215 0.956250 190045 22.86 + 552.959 0.962500 191293 26.67 + 595.967 0.968750 192531 32.00 + 613.887 0.971875 193163 35.56 + 631.295 0.975000 193783 40.00 + 649.215 0.978125 194402 45.71 + 666.111 0.981250 195017 53.33 + 683.007 0.984375 195638 64.00 + 691.199 0.985938 195955 71.11 + 699.391 0.987500 196261 80.00 + 707.071 0.989062 196578 91.43 + 713.215 0.990625 196885 106.67 + 720.383 0.992188 197187 128.00 + 729.599 0.992969 197349 142.22 + 737.791 0.993750 197501 160.00 + 746.495 0.994531 197658 182.86 + 754.687 0.995313 197813 213.33 + 762.879 0.996094 197965 256.00 + 766.975 0.996484 198043 284.44 + 771.071 0.996875 198118 320.00 + 775.679 0.997266 198200 365.71 + 779.775 0.997656 198275 426.67 + 783.871 0.998047 198351 512.00 + 786.431 0.998242 198397 568.89 + 788.479 0.998437 198434 640.00 + 790.527 0.998633 198470 731.43 + 792.575 0.998828 198507 853.33 + 794.623 0.999023 198544 1024.00 + 796.159 0.999121 198572 1137.78 + 797.183 0.999219 198591 1280.00 + 797.695 0.999316 198604 1462.86 + 798.719 0.999414 198622 1706.67 + 799.743 0.999512 198641 2048.00 + 800.255 0.999561 198651 2275.56 + 801.279 0.999609 198670 2560.00 + 801.791 0.999658 198679 2925.71 + 802.303 0.999707 198689 3413.33 + 802.815 0.999756 198699 4096.00 + 802.815 0.999780 198699 4551.11 + 803.327 0.999805 198708 5120.00 + 803.327 0.999829 198708 5851.43 + 803.839 0.999854 198717 6826.67 + 803.839 0.999878 198717 8192.00 + 803.839 0.999890 198717 9102.22 + 804.351 0.999902 198724 10240.00 + 804.351 0.999915 198724 11702.86 + 804.351 0.999927 198724 13653.33 + 804.863 0.999939 198731 16384.00 + 804.863 0.999945 198731 18204.44 + 804.863 0.999951 198731 20480.00 + 804.863 0.999957 198731 23405.71 + 804.863 0.999963 198731 27306.67 + 805.375 0.999969 198738 32768.00 + 805.375 1.000000 198738 inf +#[Mean = 82.571, StdDeviation = 148.553] +#[Max = 804.864, Total count = 198738] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 298773 requests in 30.00s, 19.09MB read +Requests/sec: 9959.17 +Transfer/sec: 651.63KB + + diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_25000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_25000.txt new file mode 100644 index 000000000..290baca52 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_25000.txt @@ -0,0 +1,106 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 834.660ms, rate sampling interval: 2627ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 4.28s 1.87s 8.37s 58.84% + Req/Sec 17.07k 3.00k 21.63k 71.43% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 4.27s + 75.000% 6.35s + 90.000% 6.98s + 99.000% 7.22s + 99.900% 8.26s + 99.990% 8.36s + 99.999% 8.37s +100.000% 8.37s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 1323.007 0.000000 57 1.00 + 2070.527 0.100000 32674 1.11 + 2521.087 0.200000 65191 1.25 + 2861.055 0.300000 97490 1.43 + 3028.991 0.400000 130433 1.67 + 4268.031 0.500000 162813 2.00 + 4460.543 0.550000 178926 2.22 + 4804.607 0.600000 196302 2.50 + 5353.471 0.650000 212241 2.86 + 5816.319 0.700000 227878 3.33 + 6348.799 0.750000 244025 4.00 + 6492.159 0.775000 251846 4.44 + 6520.831 0.800000 259857 5.00 + 6541.311 0.825000 269713 5.71 + 6553.599 0.850000 276847 6.67 + 6926.335 0.875000 284408 8.00 + 6959.103 0.887500 288583 8.89 + 6979.583 0.900000 293203 10.00 + 6991.871 0.912500 297555 11.43 + 7004.159 0.925000 301594 13.33 + 7012.351 0.937500 305274 16.00 + 7016.447 0.943750 307714 17.78 + 7020.543 0.950000 308747 20.00 + 7028.735 0.956250 311002 22.86 + 7155.711 0.962500 312862 26.67 + 7172.095 0.968750 314938 32.00 + 7180.287 0.971875 315968 35.56 + 7184.383 0.975000 316712 40.00 + 7192.575 0.978125 317707 45.71 + 7196.671 0.981250 318851 53.33 + 7204.863 0.984375 320003 64.00 + 7208.959 0.985938 320472 71.11 + 7213.055 0.987500 321420 80.00 + 7213.055 0.989062 321420 91.43 + 7217.151 0.990625 321755 106.67 + 7380.991 0.992188 322180 128.00 + 7503.871 0.992969 322425 142.22 + 7598.079 0.993750 322683 160.00 + 7688.191 0.994531 322933 182.86 + 7782.399 0.995313 323197 213.33 + 7876.607 0.996094 323493 256.00 + 7909.375 0.996484 323569 284.44 + 7979.007 0.996875 323704 320.00 + 8019.967 0.997266 323822 365.71 + 8065.023 0.997656 323951 426.67 + 8151.039 0.998047 324081 512.00 + 8171.519 0.998242 324139 568.89 + 8196.095 0.998437 324205 640.00 + 8216.575 0.998633 324267 731.43 + 8241.151 0.998828 324338 853.33 + 8261.631 0.999023 324397 1024.00 + 8273.919 0.999121 324435 1137.78 + 8282.111 0.999219 324458 1280.00 + 8294.399 0.999316 324493 1462.86 + 8302.591 0.999414 324520 1706.67 + 8318.975 0.999512 324562 2048.00 + 8323.071 0.999561 324574 2275.56 + 8327.167 0.999609 324587 2560.00 + 8331.263 0.999658 324598 2925.71 + 8339.455 0.999707 324620 3413.33 + 8343.551 0.999756 324630 4096.00 + 8347.647 0.999780 324643 4551.11 + 8351.743 0.999805 324657 5120.00 + 8351.743 0.999829 324657 5851.43 + 8355.839 0.999854 324670 6826.67 + 8355.839 0.999878 324670 8192.00 + 8359.935 0.999890 324681 9102.22 + 8359.935 0.999902 324681 10240.00 + 8359.935 0.999915 324681 11702.86 + 8364.031 0.999927 324692 13653.33 + 8364.031 0.999939 324692 16384.00 + 8364.031 0.999945 324692 18204.44 + 8368.127 0.999951 324701 20480.00 + 8368.127 0.999957 324701 23405.71 + 8368.127 0.999963 324701 27306.67 + 8368.127 0.999969 324701 32768.00 + 8368.127 0.999973 324701 36408.89 + 8368.127 0.999976 324701 40960.00 + 8372.223 0.999979 324708 46811.43 + 8372.223 1.000000 324708 inf +#[Mean = 4277.885, StdDeviation = 1866.221] +#[Max = 8368.128, Total count = 324708] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 540723 requests in 30.00s, 34.55MB read +Requests/sec: 18024.32 +Transfer/sec: 1.15MB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_3000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_3000.txt new file mode 100644 index 000000000..683593c1a --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/put_result_30s_3000.txt @@ -0,0 +1,100 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 13.561ms, rate sampling interval: 70ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 24.92ms 76.30ms 659.46ms 96.66% + Req/Sec 3.11k 1.41k 21.10k 94.16% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 6.73ms + 75.000% 20.35ms + 90.000% 37.31ms + 99.000% 517.12ms + 99.900% 647.17ms + 99.990% 659.46ms + 99.999% 659.97ms +100.000% 659.97ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.024 0.000000 1 1.00 + 0.970 0.100000 6010 1.11 + 1.682 0.200000 12018 1.25 + 2.499 0.300000 18015 1.43 + 3.657 0.400000 24024 1.67 + 6.731 0.500000 30025 2.00 + 8.839 0.550000 33023 2.22 + 11.263 0.600000 36026 2.50 + 14.031 0.650000 39032 2.86 + 17.391 0.700000 42027 3.33 + 20.351 0.750000 45037 4.00 + 22.271 0.775000 46535 4.44 + 23.871 0.800000 48038 5.00 + 26.143 0.825000 49534 5.71 + 28.911 0.850000 51037 6.67 + 32.223 0.875000 52533 8.00 + 34.399 0.887500 53293 8.89 + 37.311 0.900000 54038 10.00 + 41.215 0.912500 54785 11.43 + 44.479 0.925000 55543 13.33 + 48.159 0.937500 56292 16.00 + 49.567 0.943750 56662 17.78 + 51.743 0.950000 57036 20.00 + 54.367 0.956250 57416 22.86 + 70.399 0.962500 57787 26.67 + 140.287 0.968750 58161 32.00 + 196.351 0.971875 58349 35.56 + 253.183 0.975000 58537 40.00 + 309.759 0.978125 58724 45.71 + 365.823 0.981250 58913 53.33 + 416.511 0.984375 59099 64.00 + 444.159 0.985938 59193 71.11 + 472.063 0.987500 59287 80.00 + 500.479 0.989062 59381 91.43 + 528.895 0.990625 59477 106.67 + 552.959 0.992188 59569 128.00 + 565.759 0.992969 59615 142.22 + 579.583 0.993750 59662 160.00 + 593.919 0.994531 59709 182.86 + 602.623 0.995313 59757 213.33 + 609.791 0.996094 59806 256.00 + 612.863 0.996484 59827 284.44 + 616.447 0.996875 59851 320.00 + 620.031 0.997266 59876 365.71 + 623.103 0.997656 59898 426.67 + 629.759 0.998047 59920 512.00 + 633.343 0.998242 59932 568.89 + 636.927 0.998437 59944 640.00 + 640.511 0.998633 59956 731.43 + 644.095 0.998828 59967 853.33 + 647.679 0.999023 59979 1024.00 + 649.727 0.999121 59986 1137.78 + 651.263 0.999219 59991 1280.00 + 652.799 0.999316 59996 1462.86 + 654.847 0.999414 60003 1706.67 + 655.871 0.999512 60008 2048.00 + 656.383 0.999561 60012 2275.56 + 656.895 0.999609 60015 2560.00 + 657.407 0.999658 60018 2925.71 + 657.919 0.999707 60022 3413.33 + 658.431 0.999756 60025 4096.00 + 658.431 0.999780 60025 4551.11 + 658.943 0.999805 60029 5120.00 + 658.943 0.999829 60029 5851.43 + 658.943 0.999854 60029 6826.67 + 659.455 0.999878 60034 8192.00 + 659.455 0.999890 60034 9102.22 + 659.455 0.999902 60034 10240.00 + 659.455 0.999915 60034 11702.86 + 659.455 0.999927 60034 13653.33 + 659.455 0.999939 60034 16384.00 + 659.455 0.999945 60034 18204.44 + 659.967 0.999951 60037 20480.00 + 659.967 1.000000 60037 inf +#[Mean = 24.922, StdDeviation = 76.299] +#[Max = 659.456, Total count = 60037] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 89974 requests in 30.00s, 5.75MB read +Requests/sec: 2999.16 +Transfer/sec: 196.23KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/getRequests.lua b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/getRequests.lua index e0af77c00..55957f9f0 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/getRequests.lua +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/getRequests.lua @@ -1,11 +1,10 @@ -id = 0 -function getRequest() - id = id + 1 +function request() + id = math.random(100000) key = "k" .. id path = "/v0/entity?id=" .. key - headers = { } - headers["Host"] = "localhost:8080" + --headers = { } + --headers["Host"] = "localhost:8080" - return wrk.format("GET", path, headers, nil) + return wrk.format("GET", path, body) end \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/putRequests.lua b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/putRequests.lua index a02caaa70..a3873f04f 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/putRequests.lua +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/putRequests.lua @@ -1,13 +1,13 @@ id = 0 -function putRequest() +function request() id = id + 1 key = "k" .. id path = "/v0/entity?id=" .. key value = "v" .. math.random(100000) - headers = { } - headers["Host"] = "localhost:8080" + --headers = { } + --headers["Host"] = "localhost:8080" return wrk.format("PUT", path, headers, value) end \ No newline at end of file From 25a784e242c781aea8c553770db1e87c41433476 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 21 Feb 2024 17:55:17 +0300 Subject: [PATCH 08/60] Add report --- .../tuzikovalexandr/results/stage1/report.md | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md new file mode 100644 index 000000000..bc0394837 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md @@ -0,0 +1,95 @@ +## PUT 500 на 10 секунд + +Решил начать с малого, чтобы просто опробовать работу с wrk. Начал с вставки данных. + +### Перцентили: +``` + 50.000% 2.50ms + 75.000% 5.01ms + 90.000% 11.49ms + 99.000% 73.47ms + 99.900% 157.70ms + 99.990% 166.78ms + 99.999% 166.78ms +100.000% 166.78ms +``` + +Можно отметить уже приличное время на 90-ом и 99-ом перцентиле. +Одно из предположений: работа проводилась на виртуалке. + +## PUT 3000 на 30 секунд + +Далее решил попробовать увеличить количество запросов до 3000, а время до 30 секунд. + +### Перцентили: +``` + 50.000% 6.73ms + 75.000% 20.35ms + 90.000% 37.31ms + 99.000% 517.12ms + 99.900% 647.17ms + 99.990% 659.46ms + 99.999% 659.97ms +100.000% 659.97ms +``` + +Отметим значительное увеличение времени. Однако, даже при таких данных почти 100% удается обработать. +Еще стоит отметить, что при прогретом сервере время может упасть чуть ли не в 10 раз, но также оставаться высоким. + +На 10000 также возрасло время, но почти 100% запросов были обработаны. + +## PUT 25000 на 30 секунд + +### Перцентили: +``` + 50.000% 4.27s + 75.000% 6.35s + 90.000% 6.98s + 99.000% 7.22s + 99.900% 8.26s + 99.990% 8.36s + 99.999% 8.37s +100.000% 8.37s +``` + +На 25000 запросов как я понял, сервер уже не тянул и порядка 30% запросов не успели пройти. +Соответсвенно уже даже при 50-ом перцентиле время ответа достаточно немаленькое. + +Далее на 3000 и 10000 запросов сделал графа для анализа нагрузки на CPU и просмотра аллокаций и будут ли какие-то изменения. + +### Flame Graph (CPU) + +Как я понял, из графа 40% уходит на работу самой виртуалки, что также может являться причиной долгой работы +обработки запросов из данных перцентилей выше. + +### Flame Graph (ALLOC) + +## GET 500 на 10 секунд + +### Перцентили: +``` + +``` + +## GET 3000 на 30 секунд + +### Перцентили: +``` + +``` + +## GET 25000 на 30 секунд + +### Перцентили: +``` + +``` + +### Flame Graph (CPU) + +### Flame Graph (ALLOC) + +# Предложения по оптимизации +- Не работать на виртуалке +- Попробовать изменить настройки сервера +- Так как много ресурсов уходит на работу со строками, то получать id сразу в байтах \ No newline at end of file From 87f77fbe1cef162b3ceed7aa8c913aa2105ec735 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 21 Feb 2024 21:52:08 +0300 Subject: [PATCH 09/60] Add report --- .../stage1/get-profile-10000-alloc.html | 409 ++++++ .../results/stage1/get-profile-10000-cpu.html | 1240 +++++++++++++++++ .../stage1/get-profile-3000-alloc.html | 416 ++++++ .../results/stage1/get-profile-3000-cpu.html | 1002 +++++++++++++ .../results/stage1/get_result_10s_500.txt | 157 ++- .../results/stage1/get_result_30s_10000.txt | 196 ++- .../results/stage1/get_result_30s_25000.txt | 78 ++ .../results/stage1/get_result_30s_3000.txt | 109 ++ .../tuzikovalexandr/results/stage1/report.md | 48 +- .../tuzikovalexandr/scripts/getRequests.lua | 2 +- 10 files changed, 3471 insertions(+), 186 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-10000-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-10000-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-3000-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-3000-cpu.html diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-10000-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-10000-alloc.html new file mode 100644 index 000000000..5111f0a6d --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-10000-alloc.html @@ -0,0 +1,409 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-10000-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-10000-cpu.html new file mode 100644 index 000000000..97dd6815f --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-10000-cpu.html @@ -0,0 +1,1240 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-3000-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-3000-alloc.html new file mode 100644 index 000000000..feb8720eb --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-3000-alloc.html @@ -0,0 +1,416 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-3000-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-3000-cpu.html new file mode 100644 index 000000000..081181a48 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get-profile-3000-cpu.html @@ -0,0 +1,1002 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_10s_500.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_10s_500.txt index 298fbd453..b2618932f 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_10s_500.txt +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_10s_500.txt @@ -1,90 +1,89 @@ Running 10s test @ http://localhost:8080 1 threads and 1 connections Thread Stats Avg Stdev Max +/- Stdev - Latency 4.84ms 6.97ms 77.89ms 90.89% + Latency 3.12ms 3.71ms 43.74ms 91.82% Req/Sec -nan -nan 0.00 0.00% Latency Distribution (HdrHistogram - Recorded Latency) - 50.000% 2.36ms - 75.000% 5.51ms - 90.000% 11.27ms - 99.000% 33.28ms - 99.900% 70.21ms - 99.990% 77.95ms - 99.999% 77.95ms -100.000% 77.95ms + 50.000% 2.11ms + 75.000% 3.26ms + 90.000% 5.96ms + 99.000% 20.13ms + 99.900% 39.26ms + 99.990% 43.78ms + 99.999% 43.78ms +100.000% 43.78ms Detailed Percentile spectrum: Value Percentile TotalCount 1/(1-Percentile) - 0.024 0.000000 1 1.00 - 0.937 0.100000 500 1.11 - 1.254 0.200000 1000 1.25 - 1.554 0.300000 1500 1.43 - 1.897 0.400000 2000 1.67 - 2.357 0.500000 2499 2.00 - 2.687 0.550000 2749 2.22 - 3.135 0.600000 2999 2.50 - 3.697 0.650000 3249 2.86 - 4.455 0.700000 3498 3.33 - 5.511 0.750000 3749 4.00 - 6.099 0.775000 3873 4.44 - 6.771 0.800000 3998 5.00 - 7.603 0.825000 4123 5.71 - 8.615 0.850000 4249 6.67 - 9.751 0.875000 4373 8.00 - 10.503 0.887500 4435 8.89 - 11.271 0.900000 4498 10.00 - 12.103 0.912500 4560 11.43 - 13.319 0.925000 4624 13.33 - 14.583 0.937500 4685 16.00 - 15.487 0.943750 4716 17.78 - 16.527 0.950000 4748 20.00 - 17.583 0.956250 4779 22.86 - 18.831 0.962500 4810 26.67 - 20.383 0.968750 4841 32.00 - 21.503 0.971875 4857 35.56 - 22.511 0.975000 4873 40.00 - 23.519 0.978125 4889 45.71 - 25.439 0.981250 4904 53.33 - 27.151 0.984375 4919 64.00 - 28.303 0.985938 4927 71.11 - 30.367 0.987500 4935 80.00 - 32.351 0.989062 4943 91.43 - 34.367 0.990625 4951 106.67 - 36.703 0.992188 4958 128.00 - 40.639 0.992969 4962 142.22 - 44.767 0.993750 4966 160.00 - 48.991 0.994531 4970 182.86 - 52.863 0.995313 4974 213.33 - 55.967 0.996094 4978 256.00 - 58.239 0.996484 4980 284.44 - 60.191 0.996875 4982 320.00 - 62.559 0.997266 4984 365.71 - 64.543 0.997656 4986 426.67 - 66.623 0.998047 4988 512.00 - 67.775 0.998242 4989 568.89 - 68.223 0.998437 4991 640.00 - 68.223 0.998633 4991 731.43 - 70.207 0.998828 4992 853.33 - 70.335 0.999023 4993 1024.00 - 70.335 0.999121 4993 1137.78 - 72.319 0.999219 4994 1280.00 - 72.319 0.999316 4994 1462.86 - 74.239 0.999414 4995 1706.67 - 74.239 0.999512 4995 2048.00 - 74.239 0.999561 4995 2275.56 - 76.223 0.999609 4996 2560.00 - 76.223 0.999658 4996 2925.71 - 76.223 0.999707 4996 3413.33 - 76.223 0.999756 4996 4096.00 - 76.223 0.999780 4996 4551.11 - 77.951 0.999805 4997 5120.00 - 77.951 1.000000 4997 inf -#[Mean = 4.837, StdDeviation = 6.972] -#[Max = 77.888, Total count = 4997] + 0.053 0.000000 1 1.00 + 0.914 0.100000 500 1.11 + 1.272 0.200000 1001 1.25 + 1.559 0.300000 1500 1.43 + 1.882 0.400000 2002 1.67 + 2.113 0.500000 2500 2.00 + 2.259 0.550000 2750 2.22 + 2.437 0.600000 3001 2.50 + 2.631 0.650000 3251 2.86 + 2.881 0.700000 3500 3.33 + 3.263 0.750000 3749 4.00 + 3.505 0.775000 3874 4.44 + 3.805 0.800000 3999 5.00 + 4.087 0.825000 4124 5.71 + 4.451 0.850000 4249 6.67 + 5.107 0.875000 4374 8.00 + 5.503 0.887500 4437 8.89 + 5.959 0.900000 4499 10.00 + 6.471 0.912500 4561 11.43 + 7.195 0.925000 4624 13.33 + 8.139 0.937500 4686 16.00 + 8.679 0.943750 4719 17.78 + 9.191 0.950000 4749 20.00 + 9.831 0.956250 4780 22.86 + 10.671 0.962500 4811 26.67 + 11.719 0.968750 4842 32.00 + 12.215 0.971875 4858 35.56 + 12.791 0.975000 4874 40.00 + 13.903 0.978125 4889 45.71 + 15.007 0.981250 4905 53.33 + 16.263 0.984375 4920 64.00 + 17.135 0.985938 4928 71.11 + 18.351 0.987500 4936 80.00 + 19.279 0.989062 4944 91.43 + 20.543 0.990625 4952 106.67 + 21.791 0.992188 4959 128.00 + 22.703 0.992969 4963 142.22 + 24.191 0.993750 4967 160.00 + 25.263 0.994531 4971 182.86 + 26.863 0.995313 4975 213.33 + 28.623 0.996094 4979 256.00 + 29.279 0.996484 4981 284.44 + 30.303 0.996875 4983 320.00 + 31.967 0.997266 4985 365.71 + 33.727 0.997656 4987 426.67 + 35.423 0.998047 4989 512.00 + 37.055 0.998242 4990 568.89 + 37.311 0.998437 4991 640.00 + 38.783 0.998633 4992 731.43 + 39.263 0.998828 4993 853.33 + 40.479 0.999023 4994 1024.00 + 40.479 0.999121 4994 1137.78 + 41.215 0.999219 4995 1280.00 + 41.215 0.999316 4995 1462.86 + 42.111 0.999414 4996 1706.67 + 42.111 0.999512 4996 2048.00 + 42.111 0.999561 4996 2275.56 + 43.135 0.999609 4997 2560.00 + 43.135 0.999658 4997 2925.71 + 43.135 0.999707 4997 3413.33 + 43.135 0.999756 4997 4096.00 + 43.135 0.999780 4997 4551.11 + 43.775 0.999805 4998 5120.00 + 43.775 1.000000 4998 inf +#[Mean = 3.120, StdDeviation = 3.706] +#[Max = 43.744, Total count = 4998] #[Buckets = 27, SubBuckets = 2048] ---------------------------------------------------------- - 4998 requests in 10.00s, 346.54KB read - Non-2xx or 3xx responses: 4998 -Requests/sec: 499.78 -Transfer/sec: 34.65KB + 4999 requests in 10.00s, 331.39KB read +Requests/sec: 499.88 +Transfer/sec: 33.14KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_10000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_10000.txt index 8fc4cc762..dcfac8f77 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_10000.txt +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_10000.txt @@ -1,113 +1,103 @@ Running 30s test @ http://localhost:8080 1 threads and 1 connections - Thread calibration: mean lat.: 112.857ms, rate sampling interval: 693ms + Thread calibration: mean lat.: 169.786ms, rate sampling interval: 803ms Thread Stats Avg Stdev Max +/- Stdev - Latency 165.95ms 236.07ms 970.75ms 85.30% - Req/Sec 9.98k 3.82k 22.06k 67.86% + Latency 237.22ms 214.83ms 885.25ms 63.34% + Req/Sec 10.00k 3.80k 18.57k 70.83% Latency Distribution (HdrHistogram - Recorded Latency) - 50.000% 58.75ms - 75.000% 219.39ms - 90.000% 543.74ms - 99.000% 911.87ms - 99.900% 958.97ms - 99.990% 969.73ms - 99.999% 970.75ms -100.000% 971.26ms + 50.000% 188.93ms + 75.000% 380.67ms + 90.000% 561.66ms + 99.000% 801.28ms + 99.900% 877.05ms + 99.990% 884.73ms + 99.999% 885.76ms +100.000% 885.76ms Detailed Percentile spectrum: Value Percentile TotalCount 1/(1-Percentile) - 0.017 0.000000 2 1.00 - 1.368 0.100000 20005 1.11 - 2.575 0.200000 40016 1.25 - 6.487 0.300000 60016 1.43 - 25.743 0.400000 80025 1.67 - 58.751 0.500000 100039 2.00 - 79.103 0.550000 110044 2.22 - 104.511 0.600000 120030 2.50 - 131.967 0.650000 130034 2.86 - 165.247 0.700000 140052 3.33 - 219.391 0.750000 150048 4.00 - 253.951 0.775000 155050 4.44 - 302.335 0.800000 160039 5.00 - 354.047 0.825000 165064 5.71 - 396.543 0.850000 170057 6.67 - 452.863 0.875000 175059 8.00 - 491.263 0.887500 177549 8.89 - 543.743 0.900000 180069 10.00 - 594.431 0.912500 182554 11.43 - 658.943 0.925000 185045 13.33 - 714.239 0.937500 187550 16.00 - 739.839 0.943750 188804 17.78 - 765.951 0.950000 190057 20.00 - 791.551 0.956250 191303 22.86 - 816.639 0.962500 192550 26.67 - 837.119 0.968750 193813 32.00 - 846.847 0.971875 194436 35.56 - 856.575 0.975000 195076 40.00 - 865.791 0.978125 195680 45.71 - 877.567 0.981250 196296 53.33 - 890.367 0.984375 196923 64.00 - 896.511 0.985938 197251 71.11 - 902.655 0.987500 197559 80.00 - 907.775 0.989062 197861 91.43 - 913.919 0.990625 198179 106.67 - 920.575 0.992188 198504 128.00 - 923.647 0.992969 198642 142.22 - 927.231 0.993750 198803 160.00 - 931.839 0.994531 198961 182.86 - 936.959 0.995313 199120 213.33 - 941.567 0.996094 199279 256.00 - 943.615 0.996484 199344 284.44 - 946.175 0.996875 199423 320.00 - 948.735 0.997266 199505 365.71 - 951.295 0.997656 199592 426.67 - 953.343 0.998047 199667 512.00 - 954.367 0.998242 199702 568.89 - 955.391 0.998437 199740 640.00 - 956.927 0.998633 199784 731.43 - 957.951 0.998828 199816 853.33 - 959.487 0.999023 199862 1024.00 - 960.511 0.999121 199878 1137.78 - 961.535 0.999219 199894 1280.00 - 962.559 0.999316 199913 1462.86 - 963.583 0.999414 199930 1706.67 - 965.119 0.999512 199957 2048.00 - 965.631 0.999561 199965 2275.56 - 966.143 0.999609 199973 2560.00 - 966.655 0.999658 199982 2925.71 - 967.167 0.999707 199991 3413.33 - 967.679 0.999756 199999 4096.00 - 968.191 0.999780 200009 4551.11 - 968.191 0.999805 200009 5120.00 - 968.703 0.999829 200016 5851.43 - 969.215 0.999854 200024 6826.67 - 969.215 0.999878 200024 8192.00 - 969.727 0.999890 200030 9102.22 - 969.727 0.999902 200030 10240.00 - 969.727 0.999915 200030 11702.86 - 970.239 0.999927 200037 13653.33 - 970.239 0.999939 200037 16384.00 - 970.239 0.999945 200037 18204.44 - 970.239 0.999951 200037 20480.00 - 970.751 0.999957 200044 23405.71 - 970.751 0.999963 200044 27306.67 - 970.751 0.999969 200044 32768.00 - 970.751 0.999973 200044 36408.89 - 970.751 0.999976 200044 40960.00 - 970.751 0.999979 200044 46811.43 - 970.751 0.999982 200044 54613.33 - 970.751 0.999985 200044 65536.00 - 970.751 0.999986 200044 72817.78 - 970.751 0.999988 200044 81920.00 - 970.751 0.999989 200044 93622.86 - 971.263 0.999991 200046 109226.67 - 971.263 1.000000 200046 inf -#[Mean = 165.955, StdDeviation = 236.069] -#[Max = 970.752, Total count = 200046] + 0.038 0.000000 1 1.00 + 2.567 0.100000 20353 1.11 + 27.391 0.200000 40707 1.25 + 70.399 0.300000 61064 1.43 + 123.839 0.400000 81405 1.67 + 188.927 0.500000 101748 2.00 + 221.183 0.550000 111954 2.22 + 252.031 0.600000 122111 2.50 + 285.951 0.650000 132283 2.86 + 332.543 0.700000 142496 3.33 + 380.671 0.750000 152652 4.00 + 406.783 0.775000 157714 4.44 + 431.871 0.800000 162821 5.00 + 458.239 0.825000 167896 5.71 + 487.679 0.850000 172973 6.67 + 521.727 0.875000 178083 8.00 + 538.623 0.887500 180603 8.89 + 561.663 0.900000 183162 10.00 + 582.655 0.912500 185689 11.43 + 603.135 0.925000 188235 13.33 + 629.247 0.937500 190776 16.00 + 643.583 0.943750 192069 17.78 + 662.527 0.950000 193321 20.00 + 683.007 0.956250 194611 22.86 + 702.463 0.962500 195882 26.67 + 721.407 0.968750 197142 32.00 + 730.623 0.971875 197776 35.56 + 739.839 0.975000 198411 40.00 + 749.055 0.978125 199046 45.71 + 758.271 0.981250 199688 53.33 + 768.511 0.984375 200317 64.00 + 775.679 0.985938 200636 71.11 + 782.847 0.987500 200962 80.00 + 792.575 0.989062 201266 91.43 + 806.911 0.990625 201589 106.67 + 821.247 0.992188 201903 128.00 + 828.415 0.992969 202070 142.22 + 835.071 0.993750 202223 160.00 + 842.239 0.994531 202385 182.86 + 848.895 0.995313 202543 213.33 + 856.063 0.996094 202709 256.00 + 859.135 0.996484 202778 284.44 + 862.719 0.996875 202860 320.00 + 866.303 0.997266 202947 365.71 + 869.375 0.997656 203021 426.67 + 872.447 0.998047 203096 512.00 + 873.983 0.998242 203147 568.89 + 875.007 0.998437 203203 640.00 + 875.519 0.998633 203234 731.43 + 876.031 0.998828 203263 853.33 + 877.055 0.999023 203296 1024.00 + 878.079 0.999121 203320 1137.78 + 879.103 0.999219 203344 1280.00 + 879.615 0.999316 203356 1462.86 + 880.639 0.999414 203380 1706.67 + 881.151 0.999512 203392 2048.00 + 881.663 0.999561 203404 2275.56 + 882.175 0.999609 203416 2560.00 + 882.687 0.999658 203427 2925.71 + 883.199 0.999707 203438 3413.33 + 883.711 0.999756 203450 4096.00 + 883.711 0.999780 203450 4551.11 + 884.223 0.999805 203461 5120.00 + 884.223 0.999829 203461 5851.43 + 884.735 0.999854 203473 6826.67 + 884.735 0.999878 203473 8192.00 + 884.735 0.999890 203473 9102.22 + 884.735 0.999902 203473 10240.00 + 885.247 0.999915 203483 11702.86 + 885.247 0.999927 203483 13653.33 + 885.247 0.999939 203483 16384.00 + 885.247 0.999945 203483 18204.44 + 885.247 0.999951 203483 20480.00 + 885.247 0.999957 203483 23405.71 + 885.759 0.999963 203491 27306.67 + 885.759 1.000000 203491 inf +#[Mean = 237.217, StdDeviation = 214.830] +#[Max = 885.248, Total count = 203491] #[Buckets = 27, SubBuckets = 2048] ---------------------------------------------------------- - 299980 requests in 30.00s, 20.31MB read - Non-2xx or 3xx responses: 299980 -Requests/sec: 9998.42 -Transfer/sec: 693.25KB + 299812 requests in 30.00s, 19.41MB read + Non-2xx or 3xx responses: 7 +Requests/sec: 9993.79 +Transfer/sec: 662.56KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_25000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_25000.txt index e69de29bb..81217ec70 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_25000.txt +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_25000.txt @@ -0,0 +1,78 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 1683.189ms, rate sampling interval: 7331ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 8.33s 2.35s 11.64s 61.06% + Req/Sec 14.22k 656.00 14.88k 50.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 8.75s + 75.000% 10.54s + 90.000% 11.21s + 99.000% 11.63s + 99.900% 11.65s + 99.990% 11.65s + 99.999% 11.65s +100.000% 11.65s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 3772.415 0.000000 6 1.00 + 4681.727 0.100000 30353 1.11 + 5607.423 0.200000 60870 1.25 + 7061.503 0.300000 90983 1.43 + 7614.463 0.400000 121797 1.67 + 8749.055 0.500000 151715 2.00 + 9289.727 0.550000 167237 2.22 + 9666.559 0.600000 181965 2.50 + 9764.863 0.650000 197120 2.86 + 10305.535 0.700000 212178 3.33 + 10543.103 0.750000 228154 4.00 + 10584.063 0.775000 235781 4.44 + 10657.791 0.800000 242870 5.00 + 10698.751 0.825000 250322 5.71 + 10756.095 0.850000 259335 6.67 + 11165.695 0.875000 265587 8.00 + 11182.079 0.887500 269157 8.89 + 11206.655 0.900000 274646 10.00 + 11354.111 0.912500 277178 11.43 + 11395.071 0.925000 282229 13.33 + 11403.263 0.937500 284243 16.00 + 11411.455 0.943750 286238 17.78 + 11419.647 0.950000 288082 20.00 + 11427.839 0.956250 290003 22.86 + 11444.223 0.962500 293115 26.67 + 11452.415 0.968750 293874 32.00 + 11542.527 0.971875 295093 35.56 + 11550.719 0.975000 296421 40.00 + 11558.911 0.978125 296588 45.71 + 11583.487 0.981250 297681 53.33 + 11624.447 0.984375 299274 64.00 + 11624.447 0.985938 299274 71.11 + 11632.639 0.987500 301197 80.00 + 11632.639 0.989062 301197 91.43 + 11632.639 0.990625 301197 106.67 + 11632.639 0.992188 301197 128.00 + 11632.639 0.992969 301197 142.22 + 11632.639 0.993750 301197 160.00 + 11640.831 0.994531 302708 182.86 + 11640.831 0.995313 302708 213.33 + 11640.831 0.996094 302708 256.00 + 11640.831 0.996484 302708 284.44 + 11640.831 0.996875 302708 320.00 + 11640.831 0.997266 302708 365.71 + 11640.831 0.997656 302708 426.67 + 11640.831 0.998047 302708 512.00 + 11640.831 0.998242 302708 568.89 + 11640.831 0.998437 302708 640.00 + 11640.831 0.998633 302708 731.43 + 11649.023 0.998828 303082 853.33 + 11649.023 1.000000 303082 inf +#[Mean = 8330.871, StdDeviation = 2353.908] +#[Max = 11640.832, Total count = 303082] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 458931 requests in 30.00s, 29.71MB read + Non-2xx or 3xx responses: 8 +Requests/sec: 15297.94 +Transfer/sec: 0.99MB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_3000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_3000.txt index e69de29bb..fab16766f 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_3000.txt +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/get_result_30s_3000.txt @@ -0,0 +1,109 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 24.416ms, rate sampling interval: 145ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 26.39ms 29.32ms 117.06ms 81.12% + Req/Sec 3.01k 663.65 5.15k 72.99% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 13.08ms + 75.000% 46.69ms + 90.000% 72.64ms + 99.000% 107.65ms + 99.900% 115.78ms + 99.990% 116.93ms + 99.999% 117.06ms +100.000% 117.12ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.040 0.000000 1 1.00 + 1.002 0.100000 6004 1.11 + 1.746 0.200000 12006 1.25 + 2.577 0.300000 18001 1.43 + 4.411 0.400000 23998 1.67 + 13.079 0.500000 29996 2.00 + 18.783 0.550000 33005 2.22 + 24.799 0.600000 36004 2.50 + 31.695 0.650000 39000 2.86 + 39.519 0.700000 41996 3.33 + 46.687 0.750000 44999 4.00 + 49.983 0.775000 46499 4.44 + 53.823 0.800000 47993 5.00 + 57.983 0.825000 49496 5.71 + 62.847 0.850000 51002 6.67 + 67.455 0.875000 52508 8.00 + 69.951 0.887500 53252 8.89 + 72.639 0.900000 53994 10.00 + 75.135 0.912500 54769 11.43 + 77.887 0.925000 55494 13.33 + 81.151 0.937500 56242 16.00 + 82.623 0.943750 56624 17.78 + 84.671 0.950000 56992 20.00 + 86.847 0.956250 57375 22.86 + 89.471 0.962500 57751 26.67 + 92.799 0.968750 58117 32.00 + 95.039 0.971875 58309 35.56 + 96.959 0.975000 58493 40.00 + 98.687 0.978125 58687 45.71 + 100.863 0.981250 58867 53.33 + 103.359 0.984375 59063 64.00 + 104.511 0.985938 59151 71.11 + 105.791 0.987500 59245 80.00 + 107.007 0.989062 59337 91.43 + 108.287 0.990625 59430 106.67 + 109.439 0.992188 59528 128.00 + 109.759 0.992969 59573 142.22 + 110.399 0.993750 59618 160.00 + 111.231 0.994531 59665 182.86 + 111.871 0.995313 59710 213.33 + 112.511 0.996094 59757 256.00 + 113.151 0.996484 59781 284.44 + 113.343 0.996875 59806 320.00 + 113.727 0.997266 59827 365.71 + 114.239 0.997656 59852 426.67 + 114.815 0.998047 59878 512.00 + 114.943 0.998242 59887 568.89 + 115.135 0.998437 59904 640.00 + 115.263 0.998633 59912 731.43 + 115.391 0.998828 59921 853.33 + 115.903 0.999023 59933 1024.00 + 116.223 0.999121 59939 1137.78 + 116.351 0.999219 59945 1280.00 + 116.607 0.999316 59952 1462.86 + 116.671 0.999414 59958 1706.67 + 116.735 0.999512 59969 2048.00 + 116.735 0.999561 59969 2275.56 + 116.735 0.999609 59969 2560.00 + 116.799 0.999658 59974 2925.71 + 116.799 0.999707 59974 3413.33 + 116.863 0.999756 59980 4096.00 + 116.863 0.999780 59980 4551.11 + 116.863 0.999805 59980 5120.00 + 116.927 0.999829 59985 5851.43 + 116.927 0.999854 59985 6826.67 + 116.927 0.999878 59985 8192.00 + 116.927 0.999890 59985 9102.22 + 116.991 0.999902 59988 10240.00 + 116.991 0.999915 59988 11702.86 + 116.991 0.999927 59988 13653.33 + 116.991 0.999939 59988 16384.00 + 116.991 0.999945 59988 18204.44 + 117.055 0.999951 59990 20480.00 + 117.055 0.999957 59990 23405.71 + 117.055 0.999963 59990 27306.67 + 117.055 0.999969 59990 32768.00 + 117.055 0.999973 59990 36408.89 + 117.055 0.999976 59990 40960.00 + 117.055 0.999979 59990 46811.43 + 117.055 0.999982 59990 54613.33 + 117.119 0.999985 59991 65536.00 + 117.119 1.000000 59991 inf +#[Mean = 26.390, StdDeviation = 29.322] +#[Max = 117.056, Total count = 59991] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 89997 requests in 30.00s, 5.83MB read + Non-2xx or 3xx responses: 5 +Requests/sec: 2999.91 +Transfer/sec: 198.89KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md index bc0394837..e2f43cc6f 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md @@ -59,36 +59,78 @@ ### Flame Graph (CPU) +Файлы: put_profile_3000_cpu.html и put_profile_10000_cpu.html + Как я понял, из графа 40% уходит на работу самой виртуалки, что также может являться причиной долгой работы обработки запросов из данных перцентилей выше. +Также из общей тенденции из всех процессов самым большим является обработка запроса. + ### Flame Graph (ALLOC) +Файлы: put_profile_3000_alloc.html и put_profile_10000_alloc.html + ## GET 500 на 10 секунд +Для запросов GET также решил начать с малого. + ### Перцентили: ``` - + 50.000% 2.11ms + 75.000% 3.26ms + 90.000% 5.96ms + 99.000% 20.13ms + 99.900% 39.26ms + 99.990% 43.78ms + 99.999% 43.78ms +100.000% 43.78ms ``` +Скачок наблюдается в 99-ом прецентиле. Но ничего необычного вроде нет. + ## GET 3000 на 30 секунд ### Перцентили: ``` - + 50.000% 13.08ms + 75.000% 46.69ms + 90.000% 72.64ms + 99.000% 107.65ms + 99.900% 115.78ms + 99.990% 116.93ms + 99.999% 117.06ms +100.000% 117.12ms ``` ## GET 25000 на 30 секунд ### Перцентили: ``` - + 50.000% 8.75s + 75.000% 10.54s + 90.000% 11.21s + 99.000% 11.63s + 99.900% 11.65s + 99.990% 11.65s + 99.999% 11.65s +100.000% 11.65s ``` +В остальных случаях серверу хоть и немного плохо, но все запросы обрабатывать успевает. +Понятно, что есть моменты, когда данных не находится. + ### Flame Graph (CPU) +Файлы: get_profile_3000_cpu.html и get_profile_10000_cpu.html + +Также как и при вставке данных, большая часть - обработка запроса. + ### Flame Graph (ALLOC) +Файлы: get_profile_3000_alloc.html и get_profile_10000_alloc.html + +Здесь основной момент аллокации происходит, когда для создания ответа нам необходимо из MemorySegment сделать массив байтов. + # Предложения по оптимизации - Не работать на виртуалке - Попробовать изменить настройки сервера diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/getRequests.lua b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/getRequests.lua index 55957f9f0..d603747fd 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/getRequests.lua +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/scripts/getRequests.lua @@ -1,5 +1,5 @@ function request() - id = math.random(100000) + id = math.random(1, 100000) key = "k" .. id path = "/v0/entity?id=" .. key From 8355b8c3a4435bfb96a84e3c424ff6ef57fb4d54 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 21 Feb 2024 22:24:56 +0300 Subject: [PATCH 10/60] Report --- .../tuzikovalexandr/results/stage1/report.md | 63 ++++++++++--------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md index e2f43cc6f..d1126703a 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md @@ -1,6 +1,8 @@ -## PUT 500 на 10 секунд +# Эксперименты с WRK: Анализ производительности и предложения по оптимизации -Решил начать с малого, чтобы просто опробовать работу с wrk. Начал с вставки данных. +## Эксперимент 1: PUT запросы (500 на протяжении 10 секунд) + +Цель эксперимента: Первичное тестирование производительности через отправку данных с помощью wrk. ### Перцентили: ``` @@ -14,12 +16,13 @@ 100.000% 166.78ms ``` -Можно отметить уже приличное время на 90-ом и 99-ом перцентиле. -Одно из предположений: работа проводилась на виртуалке. +Результаты: +- Время отклика на 90-ом перцентиле составило 11.49ms и значительно увеличилось до 73.47ms на 99-ом перцентиле, что указывает на возможные задержки в обработке запросов при высокой нагрузке. +- Возможная причина задержек – использование виртуализации. -## PUT 3000 на 30 секунд +## Эксперимент 2: PUT запросы (3000 на протяжении 30 секунд) -Далее решил попробовать увеличить количество запросов до 3000, а время до 30 секунд. +Увеличить количество запросов до 3000, а время до 30 секунд. ### Перцентили: ``` @@ -33,12 +36,13 @@ 100.000% 659.97ms ``` -Отметим значительное увеличение времени. Однако, даже при таких данных почти 100% удается обработать. -Еще стоит отметить, что при прогретом сервере время может упасть чуть ли не в 10 раз, но также оставаться высоким. +Результаты: +- Наблюдается значительное увеличение времени на 99-ом перцентиле до 517.12ms, что говорит о замедлении работы сервера под высокой нагрузкой. +- Даже при увеличении нагрузки сервер справляется с обработкой запросов, однако время отклика значительно возрастает. На 10000 также возрасло время, но почти 100% запросов были обработаны. -## PUT 25000 на 30 секунд +## Эксперимент 3: PUT запросы (25000 на протяжении 30 секунд) ### Перцентили: ``` @@ -52,27 +56,27 @@ 100.000% 8.37s ``` -На 25000 запросов как я понял, сервер уже не тянул и порядка 30% запросов не успели пройти. -Соответсвенно уже даже при 50-ом перцентиле время ответа достаточно немаленькое. +Особенности: +- На данном этапе время отклика на 50-ом перцентиле достигло уже 4.27s, что свидетельствует о серьезных проблемах с производительностью сервера под такой нагрузкой. +- Приблизительно 30% запросов не были обработаны в установленные временные рамки. -Далее на 3000 и 10000 запросов сделал графа для анализа нагрузки на CPU и просмотра аллокаций и будут ли какие-то изменения. +Далее на 3000 и 10000 запросов были сделаны графа для анализа нагрузки на CPU и просмотра аллокаций и будут ли какие-то изменения. -### Flame Graph (CPU) +## Анализ Flame Graph (CPU и ALLOC для PUT запросов) Файлы: put_profile_3000_cpu.html и put_profile_10000_cpu.html -Как я понял, из графа 40% уходит на работу самой виртуалки, что также может являться причиной долгой работы -обработки запросов из данных перцентилей выше. - -Также из общей тенденции из всех процессов самым большим является обработка запроса. +Основные выводы: +- Большая часть ресурсов CPU затрачивается на работу виртуальной машины и обработку запросов. +- Выделение памяти (ALLOC) в значительной степени происходит при конвертации данных из MemorySegment в байтовые массивы. ### Flame Graph (ALLOC) Файлы: put_profile_3000_alloc.html и put_profile_10000_alloc.html -## GET 500 на 10 секунд +## Эксперимент 1: GET запросы (500 на протяжении 10 секунд) -Для запросов GET также решил начать с малого. +Для запросов GET также взять небольшие значения сначала. ### Перцентили: ``` @@ -88,7 +92,7 @@ Скачок наблюдается в 99-ом прецентиле. Но ничего необычного вроде нет. -## GET 3000 на 30 секунд +## Эксперимент 2: GET запросы (3000 на протяжении 30 секунд) ### Перцентили: ``` @@ -102,7 +106,7 @@ 100.000% 117.12ms ``` -## GET 25000 на 30 секунд +## Эксперимент 3: GET запросы (25000 на протяжении 30 секунд) ### Перцентили: ``` @@ -116,22 +120,23 @@ 100.000% 11.65s ``` -В остальных случаях серверу хоть и немного плохо, но все запросы обрабатывать успевает. -Понятно, что есть моменты, когда данных не находится. +- Аналогично PUT запросам, с увеличением нагрузки наблюдается увеличение времени отклика, особенно на высоких перцентилях. +- Сервер продолжает справляться с увеличенной нагрузкой, хотя и с более высоким временем отклика. -### Flame Graph (CPU) +### Flame Graph (CPU) для GET запросов Файлы: get_profile_3000_cpu.html и get_profile_10000_cpu.html Также как и при вставке данных, большая часть - обработка запроса. -### Flame Graph (ALLOC) +### Flame Graph (ALLOC) для GET запросов Файлы: get_profile_3000_alloc.html и get_profile_10000_alloc.html Здесь основной момент аллокации происходит, когда для создания ответа нам необходимо из MemorySegment сделать массив байтов. -# Предложения по оптимизации -- Не работать на виртуалке -- Попробовать изменить настройки сервера -- Так как много ресурсов уходит на работу со строками, то получать id сразу в байтах \ No newline at end of file +## Предложения по оптимизации + +1. Избегание использования виртуальной машины: Непосредственное использование физического сервера может существенно снизить накладные расходы на виртуализацию и улучшить производительность. +2. Оптимизация настроек сервера: Ревизия и настройка конфигураций сервера может способствовать более эффективной обработке запросов. +3. Оптимизация работы со строками и данными: Рассмотрение возможности получения и обработки данных сразу в байтовом представлении может уменьшить нагрузку на процессор и время отклика за счет сокращения необходимых преобразований. \ No newline at end of file From 5913fc772c9fd20140e97a7eef8886ee103615e2 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 21 Feb 2024 22:26:48 +0300 Subject: [PATCH 11/60] Report --- .../ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md index d1126703a..580b40506 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage1/report.md @@ -1,4 +1,4 @@ -# Эксперименты с WRK: Анализ производительности и предложения по оптимизации +# Эксперименты с WRK: Анализ производительности и предложения по оптимизации ## Эксперимент 1: PUT запросы (500 на протяжении 10 секунд) From 8c918691677772b30771f4310381e07d9961f18b Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 28 Feb 2024 20:38:15 +0300 Subject: [PATCH 12/60] Fix with report --- build.gradle | 6 ---- .../vk/itmo/test/tuzikovalexandr/Server.java | 2 +- .../itmo/test/tuzikovalexandr/ServerImpl.java | 36 ++++++++++++------- .../test/tuzikovalexandr/ServiceImpl.java | 4 +-- 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/build.gradle b/build.gradle index fef64315d..a82c0105b 100644 --- a/build.gradle +++ b/build.gradle @@ -46,12 +46,6 @@ test { jvmArgs += ["--enable-preview"] } -run { - maxHeapSize = "128m" - mainClass = "ru.vk.itmo.test.tuzikovalexandr.Server" - jvmArgs += ["--enable-preview"] -} - checkstyle { configFile = new File("checkstyle.xml") checkstyleTest.enabled = false diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index e126d9ee7..bb9c34398 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -16,7 +16,7 @@ private Server() { } public static void main(String[] args) throws IOException { - int flushThresholdBytes = 2 << 16; + long flushThresholdBytes = 1024 * 1024; Dao dao = new ReferenceDao(new Config(Files.createTempDirectory("data"), flushThresholdBytes)); ServerImpl server = new ServerImpl(new ServiceConfig( 8080, "http://localhost", diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 3adb040eb..9b3ed4aff 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -1,14 +1,9 @@ package ru.vk.itmo.test.tuzikovalexandr; -import one.nio.http.HttpServer; -import one.nio.http.HttpServerConfig; -import one.nio.http.HttpSession; -import one.nio.http.Param; -import one.nio.http.Path; -import one.nio.http.Request; -import one.nio.http.RequestMethod; -import one.nio.http.Response; +import one.nio.http.*; import one.nio.server.AcceptorConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.BaseEntry; import ru.vk.itmo.dao.Dao; @@ -18,12 +13,15 @@ import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; import java.nio.charset.StandardCharsets; -import java.util.Arrays; +import java.util.Set; public class ServerImpl extends HttpServer { private final Dao dao; - static final String[] METHODS = new String[]{"GET", "PUT", "DELETE"}; + private static final Logger log = LoggerFactory.getLogger(ServerImpl.class); + private static final Set METHODS = Set.of( + Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE + ); public ServerImpl(ServiceConfig config, Dao dao) throws IOException { super(createServerConfig(config)); @@ -44,7 +42,7 @@ private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) @Override public void handleDefault(Request request, HttpSession session) throws IOException { Response response; - if (Arrays.asList(METHODS).contains(request.getMethodName())) { + if (METHODS.contains(request.getMethod())) { response = new Response(Response.BAD_REQUEST, Response.EMPTY); } else { response = new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); @@ -52,6 +50,20 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti session.sendResponse(response); } + @Override + public void handleRequest(Request request, HttpSession session) throws IOException { + try { + super.handleRequest(request, session); + } catch (Exception e) { + if (e.getClass() == HttpException.class) { + session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); + } else { + log.error("Exception during handleRequest: ", e); + session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); + } + } + } + @Path(value = "/v0/status") public Response status() { return Response.ok("OK"); @@ -77,7 +89,7 @@ public Response getEntry(@Param(value = "id", required = true) String id) { @Path(value = "/v0/entity") @RequestMethod(Request.METHOD_PUT) public Response putEntry(@Param(value = "id", required = true) String id, Request request) { - if (id.isEmpty() || id.isBlank()) { + if (id.isEmpty() || id.isBlank() || request.getBody() == null) { return new Response(Response.BAD_REQUEST, Response.EMPTY); } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index 32ca3feb4..f5bac210b 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -12,8 +12,8 @@ public class ServiceImpl implements Service { - private ServerImpl server; private final ServiceConfig config; + private ServerImpl server; private Dao dao; public ServiceImpl(ServiceConfig config) { @@ -22,7 +22,7 @@ public ServiceImpl(ServiceConfig config) { @Override public CompletableFuture start() throws IOException { - dao = new ReferenceDao(new Config(config.workingDir(), 64)); + dao = new ReferenceDao(new Config(config.workingDir(), 1024 * 1024)); server = new ServerImpl(config, dao); server.start(); return CompletableFuture.completedFuture(null); From 149bc54ded2e7e2b8567d5ce634625478860552b Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 28 Feb 2024 21:09:05 +0300 Subject: [PATCH 13/60] Fix with report --- .../ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 9b3ed4aff..0a0db6279 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -1,6 +1,14 @@ package ru.vk.itmo.test.tuzikovalexandr; -import one.nio.http.*; +import one.nio.http.HttpException; +import one.nio.http.HttpServer; +import one.nio.http.HttpServerConfig; +import one.nio.http.HttpSession; +import one.nio.http.Param; +import one.nio.http.Path; +import one.nio.http.Request; +import one.nio.http.RequestMethod; +import one.nio.http.Response; import one.nio.server.AcceptorConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; From 4a556420c67b1b7885393b043641f4f620dae9bd Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 28 Feb 2024 22:49:58 +0300 Subject: [PATCH 14/60] Add code for stage 2 --- .../vk/itmo/test/tuzikovalexandr/Server.java | 12 ++-- .../itmo/test/tuzikovalexandr/ServerImpl.java | 45 +++++++++--- .../test/tuzikovalexandr/ServiceImpl.java | 7 +- .../vk/itmo/test/tuzikovalexandr/Worker.java | 19 +++++ .../test/tuzikovalexandr/WorkerConfig.java | 71 +++++++++++++++++++ 5 files changed, 138 insertions(+), 16 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/WorkerConfig.java diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index bb9c34398..822c83ccc 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -17,12 +17,14 @@ private Server() { public static void main(String[] args) throws IOException { long flushThresholdBytes = 1024 * 1024; - Dao dao = new ReferenceDao(new Config(Files.createTempDirectory("data"), flushThresholdBytes)); - ServerImpl server = new ServerImpl(new ServiceConfig( - 8080, "http://localhost", + ServiceConfig serviceConfig = new ServiceConfig(8080, "http://localhost", List.of("http://localhost"), - Files.createTempDirectory("data") - ), dao); + Files.createTempDirectory("data")); + Dao dao = new ReferenceDao(new Config(Files.createTempDirectory("data"), flushThresholdBytes)); + Worker worker = new Worker(new WorkerConfig()); + + ServerImpl server = new ServerImpl(serviceConfig, dao, worker); + server.start(); } } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 0a0db6279..374d8df03 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -18,22 +18,29 @@ import ru.vk.itmo.dao.Entry; import java.io.IOException; +import java.io.UncheckedIOException; import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; import java.nio.charset.StandardCharsets; import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.TimeUnit; public class ServerImpl extends HttpServer { private final Dao dao; + private final ExecutorService executorService; private static final Logger log = LoggerFactory.getLogger(ServerImpl.class); private static final Set METHODS = Set.of( Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE ); + public static final String TOO_MANY_REQUESTS = "429 Too Many Requests"; - public ServerImpl(ServiceConfig config, Dao dao) throws IOException { + public ServerImpl(ServiceConfig config, Dao dao, Worker worker) throws IOException { super(createServerConfig(config)); this.dao = dao; + this.executorService = worker.getExecutorService(); } private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { @@ -61,14 +68,16 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti @Override public void handleRequest(Request request, HttpSession session) throws IOException { try { - super.handleRequest(request, session); - } catch (Exception e) { - if (e.getClass() == HttpException.class) { - session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); - } else { - log.error("Exception during handleRequest: ", e); - session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); - } + long processingStartTime = System.nanoTime(); + executorService.execute(() -> { + try { + processingRequest(request, session, processingStartTime); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); + } catch (RejectedExecutionException e) { + session.sendResponse(new Response(TOO_MANY_REQUESTS, Response.EMPTY)); } } @@ -124,4 +133,22 @@ public Response deleteEntry(@Param(value = "id", required = true) String id) { private MemorySegment fromString(String data) { return data == null ? null : MemorySegment.ofArray(data.getBytes(StandardCharsets.UTF_8)); } + + private void processingRequest(Request request, HttpSession session, long processingStartTime) throws IOException { + if (System.nanoTime() - processingStartTime > TimeUnit.SECONDS.toNanos(2)) { + session.sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); + return; + } + + try { + super.handleRequest(request, session); + } catch (Exception e) { + if (e.getClass() == HttpException.class) { + session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); + } else { + log.error("Exception during handleRequest: ", e); + session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); + } + } + } } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index f5bac210b..cd6c6f761 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -15,6 +15,7 @@ public class ServiceImpl implements Service { private final ServiceConfig config; private ServerImpl server; private Dao dao; + private Worker worker; public ServiceImpl(ServiceConfig config) { this.config = config; @@ -23,7 +24,8 @@ public ServiceImpl(ServiceConfig config) { @Override public CompletableFuture start() throws IOException { dao = new ReferenceDao(new Config(config.workingDir(), 1024 * 1024)); - server = new ServerImpl(config, dao); + worker = new Worker(new WorkerConfig()); + server = new ServerImpl(config, dao, worker); server.start(); return CompletableFuture.completedFuture(null); } @@ -31,11 +33,12 @@ public CompletableFuture start() throws IOException { @Override public CompletableFuture stop() throws IOException { server.stop(); + worker.getExecutorService().close(); dao.close(); return CompletableFuture.completedFuture(null); } - @ServiceFactory(stage = 1) + @ServiceFactory(stage = 2) public static class Factory implements ServiceFactory.Factory { @Override diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java new file mode 100644 index 000000000..d9772a605 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java @@ -0,0 +1,19 @@ +package ru.vk.itmo.test.tuzikovalexandr; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; + +public class Worker { + + private final ExecutorService executorService; + + public Worker(WorkerConfig config) { + executorService = new ThreadPoolExecutor(config.getCorePoolSize(), config.getMaximumPoolSize(), + config.getKeepAliveTime(), config.getUnit(), config.getWorkQueue(), config.getThreadFactory(), + config.getHandler()); + } + + public ExecutorService getExecutorService() { + return executorService; + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/WorkerConfig.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/WorkerConfig.java new file mode 100644 index 000000000..6934c24cd --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/WorkerConfig.java @@ -0,0 +1,71 @@ +package ru.vk.itmo.test.tuzikovalexandr; + +import one.nio.async.CustomThreadFactory; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +public final class WorkerConfig { + private static final int MAX_QUEUE_SIZE = 1000; + private final int corePoolSize; + private final int maximumPoolSize; + private final long keepAliveTime; + private final TimeUnit unit; + private final BlockingQueue workQueue; + private final ThreadFactory threadFactory; + private final RejectedExecutionHandler handler; + + public WorkerConfig() { + this.corePoolSize = Runtime.getRuntime().availableProcessors(); + this.maximumPoolSize = Runtime.getRuntime().availableProcessors(); + this.keepAliveTime = 30L; + this.unit = TimeUnit.SECONDS; + this.workQueue = new LinkedBlockingDeque<>(MAX_QUEUE_SIZE); + this.threadFactory = new CustomThreadFactory("w", true); + this.handler = new ThreadPoolExecutor.AbortPolicy(); + } + + public WorkerConfig(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, + BlockingQueue workQueue, ThreadFactory threadFactory, + RejectedExecutionHandler handler) { + this.corePoolSize = corePoolSize; + this.maximumPoolSize = maximumPoolSize; + this.keepAliveTime = keepAliveTime; + this.unit = unit; + this.workQueue = workQueue; + this.threadFactory = threadFactory; + this.handler = handler; + } + + public int getCorePoolSize() { + return corePoolSize; + } + + public int getMaximumPoolSize() { + return maximumPoolSize; + } + + public long getKeepAliveTime() { + return keepAliveTime; + } + + public TimeUnit getUnit() { + return unit; + } + + public BlockingQueue getWorkQueue() { + return workQueue; + } + + public ThreadFactory getThreadFactory() { + return threadFactory; + } + + public RejectedExecutionHandler getHandler() { + return handler; + } +} From c4bc01f765ae0d3f84b35329dd519386e317cc47 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 6 Mar 2024 17:23:22 +0300 Subject: [PATCH 15/60] Add part of report --- .../results/stage2/get-profile-8th-cpu.html | 2522 ++++++++ .../stage2/get_result_30s_25000_8th_64con.txt | 131 + .../results/stage2/put-profile-1th-8c.html | 5184 +++++++++++++++++ .../results/stage2/put-profile-8th-alloc.html | 521 ++ .../results/stage2/put-profile-8th-cpu.html | 5099 ++++++++++++++++ .../results/stage2/put-profile-8th-lock.html | 355 ++ .../stage2/put_result_10s_500_8th_64con.txt | 89 + .../stage2/put_result_30s_25000_8th_64con.txt | 130 + .../tuzikovalexandr/results/stage2/report.md | 145 + 9 files changed, 14176 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/get-profile-8th-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/get_result_30s_25000_8th_64con.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-1th-8c.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put_result_10s_500_8th_64con.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put_result_30s_25000_8th_64con.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/get-profile-8th-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/get-profile-8th-cpu.html new file mode 100644 index 000000000..829e619e6 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/get-profile-8th-cpu.html @@ -0,0 +1,2522 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/get_result_30s_25000_8th_64con.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/get_result_30s_25000_8th_64con.txt new file mode 100644 index 000000000..cc0505d85 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/get_result_30s_25000_8th_64con.txt @@ -0,0 +1,131 @@ +Running 30s test @ http://localhost:8080 + 8 threads and 64 connections + Thread calibration: mean lat.: 370.980ms, rate sampling interval: 1900ms + Thread calibration: mean lat.: 363.893ms, rate sampling interval: 1872ms + Thread calibration: mean lat.: 373.856ms, rate sampling interval: 1960ms + Thread calibration: mean lat.: 436.493ms, rate sampling interval: 2252ms + Thread calibration: mean lat.: 389.977ms, rate sampling interval: 2051ms + Thread calibration: mean lat.: 344.434ms, rate sampling interval: 1740ms + Thread calibration: mean lat.: 302.498ms, rate sampling interval: 1692ms + Thread calibration: mean lat.: 351.591ms, rate sampling interval: 1838ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 522.30ms 559.42ms 2.03s 79.66% + Req/Sec 3.20k 746.46 4.96k 68.35% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 312.58ms + 75.000% 954.88ms + 90.000% 1.43s + 99.000% 1.85s + 99.900% 1.96s + 99.990% 2.01s + 99.999% 2.03s +100.000% 2.03s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.084 0.000000 1 1.00 + 2.223 0.100000 50945 1.11 + 6.219 0.200000 101870 1.25 + 34.815 0.300000 152793 1.43 + 151.423 0.400000 203717 1.67 + 312.575 0.500000 254662 2.00 + 402.687 0.550000 280108 2.22 + 499.711 0.600000 305572 2.50 + 628.223 0.650000 331036 2.86 + 822.783 0.700000 356497 3.33 + 954.879 0.750000 381947 4.00 + 1024.511 0.775000 394741 4.44 + 1091.583 0.800000 407582 5.00 + 1145.855 0.825000 420165 5.71 + 1231.871 0.850000 432907 6.67 + 1338.367 0.875000 445702 8.00 + 1385.471 0.887500 452002 8.89 + 1433.599 0.900000 458350 10.00 + 1478.655 0.912500 464750 11.43 + 1523.711 0.925000 471096 13.33 + 1573.887 0.937500 477441 16.00 + 1601.535 0.943750 480709 17.78 + 1629.183 0.950000 483872 20.00 + 1656.831 0.956250 487094 22.86 + 1682.431 0.962500 490193 26.67 + 1712.127 0.968750 493407 32.00 + 1729.535 0.971875 494986 35.56 + 1748.991 0.975000 496594 40.00 + 1767.423 0.978125 498183 45.71 + 1786.879 0.981250 499773 53.33 + 1807.359 0.984375 501317 64.00 + 1818.623 0.985938 502113 71.11 + 1831.935 0.987500 502946 80.00 + 1845.247 0.989062 503728 91.43 + 1859.583 0.990625 504492 106.67 + 1875.967 0.992188 505324 128.00 + 1884.159 0.992969 505726 142.22 + 1890.303 0.993750 506080 160.00 + 1897.471 0.994531 506480 182.86 + 1906.687 0.995313 506906 213.33 + 1915.903 0.996094 507297 256.00 + 1918.975 0.996484 507473 284.44 + 1924.095 0.996875 507682 320.00 + 1929.215 0.997266 507882 365.71 + 1934.335 0.997656 508079 426.67 + 1940.479 0.998047 508278 512.00 + 1943.551 0.998242 508374 568.89 + 1947.647 0.998437 508483 640.00 + 1950.719 0.998633 508566 731.43 + 1955.839 0.998828 508688 853.33 + 1959.935 0.999023 508772 1024.00 + 1961.983 0.999121 508819 1137.78 + 1965.055 0.999219 508876 1280.00 + 1967.103 0.999316 508916 1462.86 + 1970.175 0.999414 508964 1706.67 + 1976.319 0.999512 509017 2048.00 + 1979.391 0.999561 509047 2275.56 + 1983.487 0.999609 509069 2560.00 + 1986.559 0.999658 509087 2925.71 + 1991.679 0.999707 509112 3413.33 + 1995.775 0.999756 509144 4096.00 + 1997.823 0.999780 509155 4551.11 + 1999.871 0.999805 509164 5120.00 + 2002.943 0.999829 509175 5851.43 + 2006.015 0.999854 509187 6826.67 + 2010.111 0.999878 509201 8192.00 + 2013.183 0.999890 509213 9102.22 + 2013.183 0.999902 509213 10240.00 + 2015.231 0.999915 509221 11702.86 + 2017.279 0.999927 509224 13653.33 + 2019.327 0.999939 509230 16384.00 + 2021.375 0.999945 509234 18204.44 + 2022.399 0.999951 509237 20480.00 + 2023.423 0.999957 509241 23405.71 + 2025.471 0.999963 509244 27306.67 + 2026.495 0.999969 509246 32768.00 + 2028.543 0.999973 509251 36408.89 + 2028.543 0.999976 509251 40960.00 + 2028.543 0.999979 509251 46811.43 + 2029.567 0.999982 509254 54613.33 + 2029.567 0.999985 509254 65536.00 + 2030.591 0.999986 509258 72817.78 + 2030.591 0.999988 509258 81920.00 + 2030.591 0.999989 509258 93622.86 + 2030.591 0.999991 509258 109226.67 + 2030.591 0.999992 509258 131072.00 + 2030.591 0.999993 509258 145635.56 + 2030.591 0.999994 509258 163840.00 + 2031.615 0.999995 509260 187245.71 + 2031.615 0.999995 509260 218453.33 + 2031.615 0.999996 509260 262144.00 + 2031.615 0.999997 509260 291271.11 + 2031.615 0.999997 509260 327680.00 + 2031.615 0.999997 509260 374491.43 + 2031.615 0.999998 509260 436906.67 + 2032.639 0.999998 509261 524288.00 + 2032.639 1.000000 509261 inf +#[Mean = 522.298, StdDeviation = 559.417] +#[Max = 2031.616, Total count = 509261] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 747827 requests in 29.99s, 48.47MB read + Non-2xx or 3xx responses: 47206 +Requests/sec: 24939.00 +Transfer/sec: 1.62MB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-1th-8c.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-1th-8c.html new file mode 100644 index 000000000..58fa78c97 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-1th-8c.html @@ -0,0 +1,5184 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-alloc.html new file mode 100644 index 000000000..3decdb312 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-alloc.html @@ -0,0 +1,521 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-cpu.html new file mode 100644 index 000000000..6fa30c021 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-cpu.html @@ -0,0 +1,5099 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-lock.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-lock.html new file mode 100644 index 000000000..2e1ea75b0 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-lock.html @@ -0,0 +1,355 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put_result_10s_500_8th_64con.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put_result_10s_500_8th_64con.txt new file mode 100644 index 000000000..d9cf3ee8c --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put_result_10s_500_8th_64con.txt @@ -0,0 +1,89 @@ +Running 10s test @ http://localhost:8080 + 8 threads and 64 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 5.51ms 9.44ms 87.04ms 90.53% + Req/Sec -nan -nan 0.00 0.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 2.54ms + 75.000% 3.60ms + 90.000% 13.36ms + 99.000% 51.97ms + 99.900% 82.50ms + 99.990% 87.10ms + 99.999% 87.10ms +100.000% 87.10ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.339 0.000000 1 1.00 + 1.375 0.100000 502 1.11 + 1.723 0.200000 1000 1.25 + 2.003 0.300000 1499 1.43 + 2.273 0.400000 1999 1.67 + 2.543 0.500000 2500 2.00 + 2.687 0.550000 2751 2.22 + 2.829 0.600000 2998 2.50 + 2.995 0.650000 3246 2.86 + 3.227 0.700000 3496 3.33 + 3.597 0.750000 3745 4.00 + 3.845 0.775000 3870 4.44 + 4.447 0.800000 3995 5.00 + 5.787 0.825000 4120 5.71 + 7.055 0.850000 4246 6.67 + 8.895 0.875000 4369 8.00 + 10.423 0.887500 4432 8.89 + 13.359 0.900000 4494 10.00 + 16.383 0.912500 4557 11.43 + 19.295 0.925000 4620 13.33 + 21.695 0.937500 4681 16.00 + 23.583 0.943750 4713 17.78 + 25.151 0.950000 4744 20.00 + 27.023 0.956250 4775 22.86 + 28.367 0.962500 4806 26.67 + 30.303 0.968750 4837 32.00 + 31.711 0.971875 4853 35.56 + 32.639 0.975000 4869 40.00 + 34.847 0.978125 4884 45.71 + 37.983 0.981250 4900 53.33 + 39.743 0.984375 4915 64.00 + 42.143 0.985938 4923 71.11 + 45.183 0.987500 4933 80.00 + 49.727 0.989062 4939 91.43 + 53.119 0.990625 4949 106.67 + 56.479 0.992188 4954 128.00 + 58.495 0.992969 4958 142.22 + 60.927 0.993750 4962 160.00 + 65.503 0.994531 4966 182.86 + 67.967 0.995313 4970 213.33 + 71.039 0.996094 4974 256.00 + 71.551 0.996484 4976 284.44 + 72.383 0.996875 4978 320.00 + 73.151 0.997266 4980 365.71 + 73.727 0.997656 4982 426.67 + 75.711 0.998047 4985 512.00 + 75.711 0.998242 4985 568.89 + 75.775 0.998437 4986 640.00 + 81.727 0.998633 4987 731.43 + 82.495 0.998828 4988 853.33 + 83.583 0.999023 4989 1024.00 + 83.583 0.999121 4989 1137.78 + 84.671 0.999219 4990 1280.00 + 84.671 0.999316 4990 1462.86 + 84.991 0.999414 4991 1706.67 + 84.991 0.999512 4991 2048.00 + 84.991 0.999561 4991 2275.56 + 85.631 0.999609 4992 2560.00 + 85.631 0.999658 4992 2925.71 + 85.631 0.999707 4992 3413.33 + 85.631 0.999756 4992 4096.00 + 85.631 0.999780 4992 4551.11 + 87.103 0.999805 4993 5120.00 + 87.103 1.000000 4993 inf +#[Mean = 5.515, StdDeviation = 9.438] +#[Max = 87.040, Total count = 4993] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 5001 requests in 9.99s, 327.21KB read +Requests/sec: 500.73 +Transfer/sec: 32.76KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put_result_30s_25000_8th_64con.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put_result_30s_25000_8th_64con.txt new file mode 100644 index 000000000..cbc09492e --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put_result_30s_25000_8th_64con.txt @@ -0,0 +1,130 @@ +Running 30s test @ http://localhost:8080 + 8 threads and 64 connections + Thread calibration: mean lat.: 562.655ms, rate sampling interval: 2398ms + Thread calibration: mean lat.: 549.680ms, rate sampling interval: 2324ms + Thread calibration: mean lat.: 459.181ms, rate sampling interval: 2308ms + Thread calibration: mean lat.: 527.239ms, rate sampling interval: 2308ms + Thread calibration: mean lat.: 579.528ms, rate sampling interval: 2293ms + Thread calibration: mean lat.: 453.640ms, rate sampling interval: 2250ms + Thread calibration: mean lat.: 571.957ms, rate sampling interval: 2310ms + Thread calibration: mean lat.: 441.231ms, rate sampling interval: 2125ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 86.11ms 137.27ms 695.30ms 83.81% + Req/Sec 3.11k 190.78 3.66k 80.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 10.65ms + 75.000% 107.65ms + 90.000% 308.99ms + 99.000% 525.82ms + 99.900% 586.75ms + 99.990% 662.53ms + 99.999% 691.20ms +100.000% 695.81ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.103 0.000000 1 1.00 + 1.540 0.100000 49334 1.11 + 2.173 0.200000 98740 1.25 + 2.921 0.300000 148073 1.43 + 4.343 0.400000 197413 1.67 + 10.647 0.500000 246661 2.00 + 21.471 0.550000 271343 2.22 + 34.815 0.600000 296039 2.50 + 47.967 0.650000 320671 2.86 + 62.463 0.700000 345331 3.33 + 107.647 0.750000 369995 4.00 + 136.959 0.775000 382344 4.44 + 170.495 0.800000 394681 5.00 + 206.591 0.825000 406983 5.71 + 236.415 0.850000 419317 6.67 + 268.799 0.875000 431709 8.00 + 286.975 0.887500 437876 8.89 + 308.991 0.900000 443990 10.00 + 333.567 0.912500 450192 11.43 + 364.799 0.925000 456318 13.33 + 395.775 0.937500 462503 16.00 + 412.415 0.943750 465574 17.78 + 428.287 0.950000 468672 20.00 + 441.599 0.956250 471735 22.86 + 455.935 0.962500 474832 26.67 + 470.527 0.968750 477938 32.00 + 478.463 0.971875 479470 35.56 + 486.399 0.975000 480991 40.00 + 494.335 0.978125 482533 45.71 + 502.271 0.981250 484099 53.33 + 510.207 0.984375 485658 64.00 + 514.047 0.985938 486406 71.11 + 518.399 0.987500 487180 80.00 + 522.751 0.989062 487951 91.43 + 527.871 0.990625 488709 106.67 + 533.503 0.992188 489494 128.00 + 536.575 0.992969 489863 142.22 + 540.671 0.993750 490266 160.00 + 544.767 0.994531 490641 182.86 + 548.863 0.995313 490998 213.33 + 553.471 0.996094 491401 256.00 + 556.031 0.996484 491574 284.44 + 559.103 0.996875 491777 320.00 + 563.199 0.997266 491986 365.71 + 566.783 0.997656 492162 426.67 + 570.879 0.998047 492347 512.00 + 573.951 0.998242 492445 568.89 + 576.511 0.998437 492538 640.00 + 579.583 0.998633 492635 731.43 + 582.655 0.998828 492731 853.33 + 587.775 0.999023 492834 1024.00 + 590.847 0.999121 492876 1137.78 + 593.919 0.999219 492928 1280.00 + 596.991 0.999316 492972 1462.86 + 602.623 0.999414 493019 1706.67 + 610.303 0.999512 493069 2048.00 + 614.911 0.999561 493092 2275.56 + 621.055 0.999609 493118 2560.00 + 629.247 0.999658 493142 2925.71 + 634.879 0.999707 493164 3413.33 + 643.583 0.999756 493188 4096.00 + 646.655 0.999780 493200 4551.11 + 649.215 0.999805 493212 5120.00 + 652.287 0.999829 493225 5851.43 + 655.359 0.999854 493237 6826.67 + 658.943 0.999878 493249 8192.00 + 660.991 0.999890 493254 9102.22 + 663.039 0.999902 493261 10240.00 + 665.599 0.999915 493266 11702.86 + 670.207 0.999927 493273 13653.33 + 674.815 0.999939 493279 16384.00 + 676.351 0.999945 493281 18204.44 + 678.911 0.999951 493284 20480.00 + 680.959 0.999957 493287 23405.71 + 684.543 0.999963 493290 27306.67 + 685.567 0.999969 493293 32768.00 + 686.591 0.999973 493295 36408.89 + 687.103 0.999976 493296 40960.00 + 688.639 0.999979 493298 46811.43 + 689.663 0.999982 493301 54613.33 + 689.663 0.999985 493301 65536.00 + 690.687 0.999986 493302 72817.78 + 690.687 0.999988 493302 81920.00 + 691.199 0.999989 493303 93622.86 + 692.223 0.999991 493304 109226.67 + 692.735 0.999992 493305 131072.00 + 692.735 0.999993 493305 145635.56 + 692.735 0.999994 493305 163840.00 + 693.759 0.999995 493306 187245.71 + 693.759 0.999995 493306 218453.33 + 694.783 0.999996 493307 262144.00 + 694.783 0.999997 493307 291271.11 + 694.783 0.999997 493307 327680.00 + 694.783 0.999997 493307 374491.43 + 694.783 0.999998 493307 436906.67 + 695.807 0.999998 493308 524288.00 + 695.807 1.000000 493308 inf +#[Mean = 86.110, StdDeviation = 137.272] +#[Max = 695.296, Total count = 493308] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 743739 requests in 29.97s, 47.52MB read +Requests/sec: 24819.89 +Transfer/sec: 1.59MB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md new file mode 100644 index 000000000..3a181f811 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md @@ -0,0 +1,145 @@ +## PUT 500 10s 8 threads + +Сначала попробуем подать нагрузку, используя 1 поток и 1 соедниене. + +``` + 50.000% 2.49ms + 75.000% 3.52ms + 90.000% 16.51ms + 99.000% 147.07ms + 99.900% 191.87ms + 99.990% 194.94ms + 99.999% 194.94ms +100.000% 194.94ms +``` + +Далее увеличим количество потоков до 8 и количествое соединений до 64. +Результат оказался следующий: + +``` + 50.000% 2.54ms + 75.000% 3.60ms + 90.000% 13.36ms + 99.000% 51.97ms + 99.900% 82.50ms + 99.990% 87.10ms + 99.999% 87.10ms +100.000% 87.10ms +``` + +По результатам можно отметить, что на 90-ом перцентиле время уменьшается, +а на 99-ом и далее даже в 2 раза. + +Стоит отметить, что при проведении экспериментов на второй стадии, у виртуальной машины было +изменено количество доступных процессоров с 2 до 4 и объем оперативной памяти с 4 ГБ до 8 ГБ. +Однако, ни к каким улучшениям это не привело. + +## PUT 25000 30s 8 threads + +Теперь проведем эксперимент на 25000 запросов, так как это было некоторой точкой, +когда сервер начинал плохо работать. + +``` + 50.000% 17.17s + 75.000% 21.45s + 90.000% 24.82s + 99.000% 27.72s + 99.900% 27.84s + 99.990% 27.87s + 99.999% 27.92s +100.000% 27.92s +``` + +``` + 50.000% 10.65ms + 75.000% 107.65ms + 90.000% 308.99ms + 99.000% 525.82ms + 99.900% 586.75ms + 99.990% 662.53ms + 99.999% 691.20ms +100.000% 695.81ms +``` + +Аналогично как и с предыдущим экспериментом можно ответить, что прирост в скорости значительный. + +## Анализ Flame Graph (CPU PUT запросов) + +Далее проведем эксперимент профилирования с несколькими соединениями и потоками, чтобы посмотреть, +как теперь распределеяется трата ресурсов. Как входые параметры было подано 25000 запросов, 8 потоков и +64 соединения. На диаграмме put-profile-8c-cpu.html предствлены результаты эксперимента. + +Можно отметить, что теперь селекторы не тратят свои ресурсы на выполнение логики запроса. +Так мы высвободили ресурсы для его базовой задачи - обработки следующих запросов (около 20%). +Также это чтение и отправка входящих запросов и поллинг. Еще 1% тратится на работу с блокировкой у очереди. + +Обработкой логики запросов и чтением их из очереди занимаются сами воркеры (> 70%). Тут также можно отметить, +что чуть более 15% уходит на работу с очередью. + +В остальном, как это и было раньше, но у селекторов, теперь воркеры занимаются работой с бд и записью ответов в сокет. + +Как итог из общей тенденции: происходит выигрыш во времени работы селектора, обработки запроса им же, но теперь +добавляется нагрузка на поллинг. + +## Анализ Flame Graph (PUT запросов) работа селекторов и потоков + +Был проведен эксперимент, где на вход подавался 1 поток и 8 соединений. Напомню, что виртуальной машине было +выделено 4 ядра. + +Результаты на диаграмме put-profile-1th-8c.html. + +Очень интересное замечение, что количество селекторов в результате получилось всего 3. +Есть предположение, что это ограничение ОС или гипервизора. В случае виртуальных машин, гипервизоры, +такие как VMware ESXi, Microsoft Hyper-V, или Oracle VirtualBox, могут вводить определённые +ограничения на использование аппаратных ресурсов виртуализированными системами, что +также может сказаться на количестве эффективно используемых потоков. + +## Flame Graph (ALLOC PUT запросов) + +Результаты на диаграмме put-profile-8th-alloc.html. + +Все как и аналогично выше, так как теперь логику обработки запросов взяли на себя воркеры, нагрузка на селекторы +сильно уменьшилась. Но добавились незначительные расходы ресурсов на создание воркеров и их работу. + +## GET 25000 30s 8 threads + +При анализе улучшений GET-запросов сразу дадим высокую нагрузку. И, как аналогично, сначала будет 1 поток, 1 соединение, +потом 8 потоков, 64 соединения. + +``` + 50.000% 18.06s + 75.000% 22.99s + 90.000% 25.46s + 99.000% 27.46s + 99.900% 27.66s + 99.990% 27.67s + 99.999% 27.69s +100.000% 27.69s +``` + +``` + 50.000% 312.58ms + 75.000% 954.88ms + 90.000% 1.43s + 99.000% 1.85s + 99.900% 1.96s + 99.990% 2.01s + 99.999% 2.03s +100.000% 2.03s +``` + +Как можно заметить результаты улучшились в 10 раз. И запросов при наличии большего числа потоков и соединений +обрабатывается также больше. Как и с PUT-запросами причины улучшения - разгрузка селекторов. + +## Анализ Flame Graph (CPU GET запросов) + +Далее проведем эксперимент профилирования с несколькими соединениями и потоками, чтобы посмотреть, +как теперь распределеяется трата ресурсов уже для GET-запросов. Как входые параметры было подано 25000 запросов, +8 потоков и 64 соединения. На диаграмме get-profile-8c-cpu.html предствлены результаты эксперимента. + +Аналогично, как и с PUT-запросами ситуация с воркерами. + +## Новая точка разладки + +Так как изначально максимальный размер очереди выставлен 1000, попробуем и количество соединений увеличить +до такого числа. \ No newline at end of file From 74e6f567d7030288f6a1376106248073140a8b43 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 6 Mar 2024 18:37:42 +0300 Subject: [PATCH 16/60] Add last part of report --- .../put-profile-8th-1000con-80000-alloc.html | 514 ++ .../put-profile-8th-1000con-80000-cpu.html | 5585 ++++++++++++++++ .../put-profile-8th-1000con-80000-lock.html | 383 ++ .../stage2/put-profile-8th-1000con-80000.txt | 139 + .../put-profile-8th-1050con-80000-alloc.html | 648 ++ .../put-profile-8th-1050con-80000-cpu.html | 5957 +++++++++++++++++ .../put-profile-8th-1050con-80000-lock.html | 396 ++ .../stage2/put-profile-8th-1050con-80000.txt | 141 + .../tuzikovalexandr/results/stage2/report.md | 74 +- 9 files changed, 13836 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000.txt diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-alloc.html new file mode 100644 index 000000000..c49fda549 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-alloc.html @@ -0,0 +1,514 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-cpu.html new file mode 100644 index 000000000..7f0bc3fdf --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-cpu.html @@ -0,0 +1,5585 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-lock.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-lock.html new file mode 100644 index 000000000..a593b0481 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000-lock.html @@ -0,0 +1,383 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000.txt new file mode 100644 index 000000000..02a446bca --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1000con-80000.txt @@ -0,0 +1,139 @@ +Running 30s test @ http://localhost:8080 + 8 threads and 1000 connections + Thread calibration: mean lat.: 1102.319ms, rate sampling interval: 2734ms + Thread calibration: mean lat.: 1000.892ms, rate sampling interval: 2461ms + Thread calibration: mean lat.: 980.853ms, rate sampling interval: 2428ms + Thread calibration: mean lat.: 1165.292ms, rate sampling interval: 2877ms + Thread calibration: mean lat.: 890.115ms, rate sampling interval: 2447ms + Thread calibration: mean lat.: 775.102ms, rate sampling interval: 2316ms + Thread calibration: mean lat.: 977.626ms, rate sampling interval: 2398ms + Thread calibration: mean lat.: 813.818ms, rate sampling interval: 2256ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 580.68ms 507.08ms 2.19s 55.26% + Req/Sec 10.56k 679.81 12.20k 72.41% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 523.78ms + 75.000% 954.37ms + 90.000% 1.33s + 99.000% 1.75s + 99.900% 2.04s + 99.990% 2.13s + 99.999% 2.17s +100.000% 2.19s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.148 0.000000 1 1.00 + 16.335 0.100000 163357 1.11 + 47.295 0.200000 326777 1.25 + 105.087 0.300000 490082 1.43 + 305.151 0.400000 653539 1.67 + 523.775 0.500000 816934 2.00 + 620.031 0.550000 898800 2.22 + 709.631 0.600000 980171 2.50 + 788.991 0.650000 1061979 2.86 + 868.351 0.700000 1143821 3.33 + 954.367 0.750000 1225285 4.00 + 1004.543 0.775000 1266113 4.44 + 1058.815 0.800000 1307215 5.00 + 1120.255 0.825000 1347673 5.71 + 1186.815 0.850000 1388828 6.67 + 1252.351 0.875000 1429898 8.00 + 1287.167 0.887500 1450046 8.89 + 1325.055 0.900000 1470420 10.00 + 1363.967 0.912500 1490932 11.43 + 1404.927 0.925000 1511055 13.33 + 1448.959 0.937500 1531783 16.00 + 1470.463 0.943750 1541790 17.78 + 1494.015 0.950000 1551804 20.00 + 1522.687 0.956250 1562171 22.86 + 1555.455 0.962500 1572451 26.67 + 1590.271 0.968750 1582489 32.00 + 1609.727 0.971875 1587556 35.56 + 1630.207 0.975000 1592685 40.00 + 1651.711 0.978125 1597866 45.71 + 1674.239 0.981250 1602916 53.33 + 1697.791 0.984375 1608080 64.00 + 1710.079 0.985938 1610664 71.11 + 1723.391 0.987500 1613174 80.00 + 1738.751 0.989062 1615648 91.43 + 1758.207 0.990625 1618251 106.67 + 1780.735 0.992188 1620769 128.00 + 1794.047 0.992969 1622032 142.22 + 1810.431 0.993750 1623279 160.00 + 1827.839 0.994531 1624560 182.86 + 1847.295 0.995313 1625808 213.33 + 1871.871 0.996094 1627120 256.00 + 1885.183 0.996484 1627762 284.44 + 1900.543 0.996875 1628385 320.00 + 1918.975 0.997266 1629012 365.71 + 1945.599 0.997656 1629656 426.67 + 1970.175 0.998047 1630282 512.00 + 1982.463 0.998242 1630610 568.89 + 1995.775 0.998437 1630911 640.00 + 2014.207 0.998633 1631241 731.43 + 2028.543 0.998828 1631556 853.33 + 2042.879 0.999023 1631889 1024.00 + 2049.023 0.999121 1632029 1137.78 + 2057.215 0.999219 1632189 1280.00 + 2065.407 0.999316 1632372 1462.86 + 2072.575 0.999414 1632527 1706.67 + 2079.743 0.999512 1632693 2048.00 + 2083.839 0.999561 1632762 2275.56 + 2087.935 0.999609 1632831 2560.00 + 2094.079 0.999658 1632921 2925.71 + 2099.199 0.999707 1632992 3413.33 + 2107.391 0.999756 1633084 4096.00 + 2111.487 0.999780 1633120 4551.11 + 2115.583 0.999805 1633154 5120.00 + 2119.679 0.999829 1633193 5851.43 + 2123.775 0.999854 1633226 6826.67 + 2129.919 0.999878 1633286 8192.00 + 2129.919 0.999890 1633286 9102.22 + 2131.967 0.999902 1633313 10240.00 + 2134.015 0.999915 1633328 11702.86 + 2138.111 0.999927 1633356 13653.33 + 2140.159 0.999939 1633369 16384.00 + 2142.207 0.999945 1633379 18204.44 + 2144.255 0.999951 1633389 20480.00 + 2146.303 0.999957 1633399 23405.71 + 2148.351 0.999963 1633406 27306.67 + 2152.447 0.999969 1633416 32768.00 + 2154.495 0.999973 1633419 36408.89 + 2158.591 0.999976 1633430 40960.00 + 2158.591 0.999979 1633430 46811.43 + 2162.687 0.999982 1633436 54613.33 + 2166.783 0.999985 1633440 65536.00 + 2168.831 0.999986 1633441 72817.78 + 2172.927 0.999988 1633445 81920.00 + 2174.975 0.999989 1633447 93622.86 + 2177.023 0.999991 1633449 109226.67 + 2179.071 0.999992 1633455 131072.00 + 2179.071 0.999993 1633455 145635.56 + 2179.071 0.999994 1633455 163840.00 + 2179.071 0.999995 1633455 187245.71 + 2181.119 0.999995 1633456 218453.33 + 2183.167 0.999996 1633457 262144.00 + 2185.215 0.999997 1633460 291271.11 + 2185.215 0.999997 1633460 327680.00 + 2185.215 0.999997 1633460 374491.43 + 2185.215 0.999998 1633460 436906.67 + 2185.215 0.999998 1633460 524288.00 + 2187.263 0.999998 1633462 582542.22 + 2187.263 0.999998 1633462 655360.00 + 2187.263 0.999999 1633462 748982.86 + 2187.263 0.999999 1633462 873813.33 + 2187.263 0.999999 1633462 1048576.00 + 2187.263 0.999999 1633462 1165084.44 + 2187.263 0.999999 1633462 1310720.00 + 2187.263 0.999999 1633462 1497965.71 + 2191.359 0.999999 1633463 1747626.67 + 2191.359 1.000000 1633463 inf +#[Mean = 580.680, StdDeviation = 507.082] +#[Max = 2189.312, Total count = 1633463] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 2350265 requests in 30.00s, 150.17MB read +Requests/sec: 78330.66 +Transfer/sec: 5.01MB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-alloc.html new file mode 100644 index 000000000..3dd977ce6 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-alloc.html @@ -0,0 +1,648 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-cpu.html new file mode 100644 index 000000000..9820415da --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-cpu.html @@ -0,0 +1,5957 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-lock.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-lock.html new file mode 100644 index 000000000..491e2a52b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000-lock.html @@ -0,0 +1,396 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000.txt new file mode 100644 index 000000000..84026d631 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/put-profile-8th-1050con-80000.txt @@ -0,0 +1,141 @@ +Running 30s test @ http://localhost:8080 + 8 threads and 1050 connections + Thread calibration: mean lat.: 1101.885ms, rate sampling interval: 2738ms + Thread calibration: mean lat.: 1249.971ms, rate sampling interval: 3133ms + Thread calibration: mean lat.: 1058.251ms, rate sampling interval: 2732ms + Thread calibration: mean lat.: 1144.686ms, rate sampling interval: 2889ms + Thread calibration: mean lat.: 1087.241ms, rate sampling interval: 2801ms + Thread calibration: mean lat.: 530.033ms, rate sampling interval: 1895ms + Thread calibration: mean lat.: 542.796ms, rate sampling interval: 2594ms + Thread calibration: mean lat.: 1141.150ms, rate sampling interval: 2953ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 696.47ms 590.80ms 2.25s 52.17% + Req/Sec 10.15k 1.21k 12.17k 74.55% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 624.64ms + 75.000% 1.19s + 90.000% 1.55s + 99.000% 1.94s + 99.900% 2.10s + 99.990% 2.19s + 99.999% 2.23s +100.000% 2.26s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.350 0.000000 1 1.00 + 17.391 0.100000 156269 1.11 + 57.215 0.200000 312436 1.25 + 145.919 0.300000 468606 1.43 + 383.487 0.400000 624848 1.67 + 624.639 0.500000 781140 2.00 + 733.695 0.550000 859334 2.22 + 856.575 0.600000 937297 2.50 + 969.215 0.650000 1015499 2.86 + 1080.319 0.700000 1093783 3.33 + 1192.959 0.750000 1172039 4.00 + 1247.231 0.775000 1210887 4.44 + 1302.527 0.800000 1249689 5.00 + 1359.871 0.825000 1289135 5.71 + 1418.239 0.850000 1328166 6.67 + 1480.703 0.875000 1366953 8.00 + 1513.471 0.887500 1386404 8.89 + 1549.311 0.900000 1406209 10.00 + 1586.175 0.912500 1425402 11.43 + 1628.159 0.925000 1444934 13.33 + 1674.239 0.937500 1464575 16.00 + 1698.815 0.943750 1474236 17.78 + 1725.439 0.950000 1484234 20.00 + 1752.063 0.956250 1493852 22.86 + 1778.687 0.962500 1503539 26.67 + 1808.383 0.968750 1513441 32.00 + 1823.743 0.971875 1518371 35.56 + 1839.103 0.975000 1523215 40.00 + 1855.487 0.978125 1527915 45.71 + 1874.943 0.981250 1532889 53.33 + 1896.447 0.984375 1537703 64.00 + 1907.711 0.985938 1540077 71.11 + 1919.999 0.987500 1542521 80.00 + 1933.311 0.989062 1545073 91.43 + 1946.623 0.990625 1547460 106.67 + 1960.959 0.992188 1549835 128.00 + 1969.151 0.992969 1551120 142.22 + 1977.343 0.993750 1552318 160.00 + 1987.583 0.994531 1553548 182.86 + 1997.823 0.995313 1554719 213.33 + 2011.135 0.996094 1555993 256.00 + 2017.279 0.996484 1556530 284.44 + 2025.471 0.996875 1557145 320.00 + 2034.687 0.997266 1557747 365.71 + 2045.951 0.997656 1558408 426.67 + 2058.239 0.998047 1559024 512.00 + 2064.383 0.998242 1559308 568.89 + 2071.551 0.998437 1559579 640.00 + 2080.767 0.998633 1559888 731.43 + 2091.007 0.998828 1560217 853.33 + 2103.295 0.999023 1560538 1024.00 + 2107.391 0.999121 1560651 1137.78 + 2115.583 0.999219 1560841 1280.00 + 2121.727 0.999316 1560969 1462.86 + 2127.871 0.999414 1561101 1706.67 + 2136.063 0.999512 1561281 2048.00 + 2140.159 0.999561 1561367 2275.56 + 2142.207 0.999609 1561414 2560.00 + 2146.303 0.999658 1561483 2925.71 + 2154.495 0.999707 1561582 3413.33 + 2158.591 0.999756 1561640 4096.00 + 2162.687 0.999780 1561693 4551.11 + 2164.735 0.999805 1561726 5120.00 + 2168.831 0.999829 1561770 5851.43 + 2172.927 0.999854 1561798 6826.67 + 2179.071 0.999878 1561835 8192.00 + 2183.167 0.999890 1561848 9102.22 + 2187.263 0.999902 1561872 10240.00 + 2191.359 0.999915 1561895 11702.86 + 2193.407 0.999927 1561903 13653.33 + 2197.503 0.999939 1561926 16384.00 + 2199.551 0.999945 1561935 18204.44 + 2201.599 0.999951 1561942 20480.00 + 2205.695 0.999957 1561953 23405.71 + 2209.791 0.999963 1561960 27306.67 + 2213.887 0.999969 1561972 32768.00 + 2215.935 0.999973 1561977 36408.89 + 2217.983 0.999976 1561982 40960.00 + 2220.031 0.999979 1561985 46811.43 + 2222.079 0.999982 1561989 54613.33 + 2224.127 0.999985 1561995 65536.00 + 2224.127 0.999986 1561995 72817.78 + 2226.175 0.999988 1561998 81920.00 + 2228.223 0.999989 1562001 93622.86 + 2230.271 0.999991 1562003 109226.67 + 2234.367 0.999992 1562006 131072.00 + 2234.367 0.999993 1562006 145635.56 + 2236.415 0.999994 1562008 163840.00 + 2236.415 0.999995 1562008 187245.71 + 2238.463 0.999995 1562010 218453.33 + 2240.511 0.999996 1562012 262144.00 + 2240.511 0.999997 1562012 291271.11 + 2240.511 0.999997 1562012 327680.00 + 2240.511 0.999997 1562012 374491.43 + 2242.559 0.999998 1562013 436906.67 + 2246.655 0.999998 1562014 524288.00 + 2246.655 0.999998 1562014 582542.22 + 2246.655 0.999998 1562014 655360.00 + 2246.655 0.999999 1562014 748982.86 + 2248.703 0.999999 1562015 873813.33 + 2248.703 0.999999 1562015 1048576.00 + 2248.703 0.999999 1562015 1165084.44 + 2248.703 0.999999 1562015 1310720.00 + 2248.703 0.999999 1562015 1497965.71 + 2256.895 0.999999 1562016 1747626.67 + 2256.895 1.000000 1562016 inf +#[Mean = 696.467, StdDeviation = 590.800] +#[Max = 2254.848, Total count = 1562016] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 2260098 requests in 29.99s, 144.43MB read + Socket errors: connect 35, read 0, write 0, timeout 490 + Non-2xx or 3xx responses: 1488 +Requests/sec: 75359.74 +Transfer/sec: 4.82MB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md index 3a181f811..b241f1989 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md @@ -142,4 +142,76 @@ ## Новая точка разладки Так как изначально максимальный размер очереди выставлен 1000, попробуем и количество соединений увеличить -до такого числа. \ No newline at end of file +до такого числа. Входные параметры передадим 8 потоков, 1050 соединений и 80000 запросов. + +``` + 50.000% 79.87ms + 75.000% 291.84ms + 90.000% 519.42ms + 99.000% 1.24s + 99.900% 1.53s + 99.990% 1.70s + 99.999% 1.74s +100.000% 1.76s +``` + +Вроде, по результам довольно даже неплохо с учетом того ошибок соединения. Но на 99-ом перцентиле есть скачок. + +``` +Socket errors: connect 35, read 0, write 0, timeout 490 +``` + +Кажется, что размер очереди в 1000 даже достаточно оптимален. + +## Flame Graph (CPU, ALLOC PUT запросов) + +Результаты в put-profile-8th-1050con-80000-cpu.html и put-profile-8th-1050con-80000-alloc.html. +Вроде, никаких аномалий не выявлено. + +## PUT 80000 30s 8th 1000con + +Уменьшив количество соединений, получилось избавиться от ошибок. Результаты перцентилей: + +``` + 50.000% 523.78ms + 75.000% 954.37ms + 90.000% 1.33s + 99.000% 1.75s + 99.900% 2.04s + 99.990% 2.13s + 99.999% 2.17s +100.000% 2.19s +``` + +Профили эксперимента в файлах put-profile-8th-1000con-80000-cpu.html, +put-profile-8th-1000con-80000-alloc.html и put-profile-8th-1000con-80000-lock.html. Сравнивая профили +предыдущего эксперимента и этого особых изменений не выявлено. +По профилю блокировок видно, что работа с ними не занимает много времени. То есть при взятии задачи и +ее добавлении расходуется 20% ресурсов. + +## Возможные улучшения + +### Политика обработки запросов + +1. CallerRunsPolicy. Сам поток будет распоряжаться задачей и как обрабатывать переполнение. Не подходит, так как +будет лишняя нагрузка на селекторы. +2. DiscardPolicies. Не совсем подходит, так как ошибок он не выдает и непонятно, почему запрос не был выполнен, +но определяет какие запросы будут убраны из очереди (более новые или более старые). +3. AbortPolicy. Кажется, что наиболее подходящий варинт, так как при отклонении обработки выдает исключение, +которое можно обработать и тем самым оповестить пользователя. + +### Входные параметры + +1. Как было видно из экспериментов размер очереди влияет на работу сервиса. Если очередь большая, то +может возникуть хранение слишком старых заспросов, а при слишком маленькой есть шанс, что сервис просто их +не сможет все обработать. +2. Количество потоков. Было довольно сложно понять их влияние. И даже до сих пор. Уже было отмечено в отчете, +что даже выделив 8 потоков (а виртуальной машине 4 ядра), были сознады всего 3, как я понял. Так что здесь +все зависит только от физических возможностей железа. + +### Очередь + +1. ArrayBlockingQueue. Работает по принципу FIFO. Не концентрируем внимание на свежести запроса. Возможно, +более предпочтительный вариант, но в этой реализации выбран следующий. +2. LinkedBlockingDeque. Работает по принципу LIFO. Обрабатываем свежие запросы. +3. PriorityBlockingQueue. Просто поиздеваться надо пользователями))) \ No newline at end of file From 21ef485ae33d45f17b6aaa87bc4c8289ffbd1803 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 6 Mar 2024 19:22:07 +0300 Subject: [PATCH 17/60] For build --- .../ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md index b241f1989..84b48e5ba 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md @@ -214,4 +214,4 @@ put-profile-8th-1000con-80000-alloc.html и put-profile-8th-1000con-80000-lock.h 1. ArrayBlockingQueue. Работает по принципу FIFO. Не концентрируем внимание на свежести запроса. Возможно, более предпочтительный вариант, но в этой реализации выбран следующий. 2. LinkedBlockingDeque. Работает по принципу LIFO. Обрабатываем свежие запросы. -3. PriorityBlockingQueue. Просто поиздеваться надо пользователями))) \ No newline at end of file +3. PriorityBlockingQueue. Просто поиздеваться надо пользователями))) From 6dfb117c098d135dbb914dabc843841206c16214 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 6 Mar 2024 19:39:46 +0300 Subject: [PATCH 18/60] For build --- .../ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md index 84b48e5ba..b241f1989 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md @@ -214,4 +214,4 @@ put-profile-8th-1000con-80000-alloc.html и put-profile-8th-1000con-80000-lock.h 1. ArrayBlockingQueue. Работает по принципу FIFO. Не концентрируем внимание на свежести запроса. Возможно, более предпочтительный вариант, но в этой реализации выбран следующий. 2. LinkedBlockingDeque. Работает по принципу LIFO. Обрабатываем свежие запросы. -3. PriorityBlockingQueue. Просто поиздеваться надо пользователями))) +3. PriorityBlockingQueue. Просто поиздеваться надо пользователями))) \ No newline at end of file From 83ca308e784742dfa78c9ad2ff4b3d74936fdcfb Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 6 Mar 2024 19:52:37 +0300 Subject: [PATCH 19/60] For build --- .../ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md index b241f1989..84b48e5ba 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md @@ -214,4 +214,4 @@ put-profile-8th-1000con-80000-alloc.html и put-profile-8th-1000con-80000-lock.h 1. ArrayBlockingQueue. Работает по принципу FIFO. Не концентрируем внимание на свежести запроса. Возможно, более предпочтительный вариант, но в этой реализации выбран следующий. 2. LinkedBlockingDeque. Работает по принципу LIFO. Обрабатываем свежие запросы. -3. PriorityBlockingQueue. Просто поиздеваться надо пользователями))) \ No newline at end of file +3. PriorityBlockingQueue. Просто поиздеваться надо пользователями))) From 1bf1d24c277aa99ff5187adacc3ecf902839d02b Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 6 Mar 2024 21:43:17 +0300 Subject: [PATCH 20/60] For build --- .../ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md index 84b48e5ba..365ace6f8 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage2/report.md @@ -215,3 +215,4 @@ put-profile-8th-1000con-80000-alloc.html и put-profile-8th-1000con-80000-lock.h более предпочтительный вариант, но в этой реализации выбран следующий. 2. LinkedBlockingDeque. Работает по принципу LIFO. Обрабатываем свежие запросы. 3. PriorityBlockingQueue. Просто поиздеваться надо пользователями))) + From 42cfe600887a92651e58b69e637bbdd46d48cd3f Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 13 Mar 2024 13:14:22 +0300 Subject: [PATCH 21/60] Correcting code based on review --- .../vk/itmo/test/tuzikovalexandr/ServerImpl.java | 4 ++-- .../itmo/test/tuzikovalexandr/ServiceImpl.java | 2 +- .../ru/vk/itmo/test/tuzikovalexandr/Worker.java | 16 ++++++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 374d8df03..d669484ff 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -18,7 +18,6 @@ import ru.vk.itmo.dao.Entry; import java.io.IOException; -import java.io.UncheckedIOException; import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; import java.nio.charset.StandardCharsets; @@ -73,7 +72,8 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti try { processingRequest(request, session, processingStartTime); } catch (IOException e) { - throw new UncheckedIOException(e); + log.error("Exception while sending close connection", e); + session.scheduleClose(); } }); } catch (RejectedExecutionException e) { diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index cd6c6f761..f007d83a2 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -33,7 +33,7 @@ public CompletableFuture start() throws IOException { @Override public CompletableFuture stop() throws IOException { server.stop(); - worker.getExecutorService().close(); + worker.shutdownAndAwaitTermination(); dao.close(); return CompletableFuture.completedFuture(null); } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java index d9772a605..0715fb864 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java @@ -2,6 +2,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; public class Worker { @@ -16,4 +17,19 @@ public Worker(WorkerConfig config) { public ExecutorService getExecutorService() { return executorService; } + + public void shutdownAndAwaitTermination() { + executorService.shutdown(); + try { + if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) { + executorService.shutdownNow(); + if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) { + System.err.println("Pool did not terminate"); + } + } + } catch (InterruptedException ex) { + executorService.shutdownNow(); + Thread.currentThread().interrupt(); + } + } } From 939964f136ed0a9e7faf6427568eec872d3ead5b Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 13 Mar 2024 13:19:47 +0300 Subject: [PATCH 22/60] Correcting code based on review --- src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java index 0715fb864..82ed51619 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Worker.java @@ -1,5 +1,8 @@ package ru.vk.itmo.test.tuzikovalexandr; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -7,6 +10,7 @@ public class Worker { private final ExecutorService executorService; + private static final Logger log = LoggerFactory.getLogger(ServerImpl.class); public Worker(WorkerConfig config) { executorService = new ThreadPoolExecutor(config.getCorePoolSize(), config.getMaximumPoolSize(), @@ -24,7 +28,7 @@ public void shutdownAndAwaitTermination() { if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) { executorService.shutdownNow(); if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) { - System.err.println("Pool did not terminate"); + log.error("Pool did not terminate"); } } } catch (InterruptedException ex) { From ab1f9d7ab72458263595bcb1b2300fabafa64d2a Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 13 Mar 2024 15:39:45 +0300 Subject: [PATCH 23/60] Sketches --- .../tuzikovalexandr/ConsistentHashing.java | 39 ++++++++ .../vk/itmo/test/tuzikovalexandr/Server.java | 12 ++- .../itmo/test/tuzikovalexandr/ServerImpl.java | 95 ++++++++++++++++++- .../test/tuzikovalexandr/ServiceImpl.java | 15 ++- 4 files changed, 147 insertions(+), 14 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java new file mode 100644 index 000000000..321c2aee8 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -0,0 +1,39 @@ +package ru.vk.itmo.test.tuzikovalexandr; + +import java.util.SortedMap; +import java.util.TreeMap; + +public class ConsistentHashing { + private final SortedMap circle = new TreeMap<>(); + + public ConsistentHashing() { + + } + + public void addNode(String node) { + int hash = getHash(node); + circle.put(hash, node); + } + + public void removeNode(String node) { + int hash = getHash(node); + circle.remove(hash); + } + + public String getNode(Object key) { + if (circle.isEmpty()) { + return null; + } + + int hash = getHash(key.toString()); + if (!circle.containsKey(hash)) { + hash = circle.firstKey(); + } + + return circle.get(hash); + } + + private int getHash(String key) { + return key.hashCode(); + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index 822c83ccc..6072052c3 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -7,9 +7,12 @@ import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; import java.util.List; public final class Server { + private static String BASE_URL = "http://localhost"; + private static int BASE_PORT = 8080; private Server() { @@ -17,10 +20,11 @@ private Server() { public static void main(String[] args) throws IOException { long flushThresholdBytes = 1024 * 1024; - ServiceConfig serviceConfig = new ServiceConfig(8080, "http://localhost", - List.of("http://localhost"), - Files.createTempDirectory("data")); - Dao dao = new ReferenceDao(new Config(Files.createTempDirectory("data"), flushThresholdBytes)); + + Path dataPath = Files.createTempDirectory("data"); + + Dao dao = new ReferenceDao(new Config(dataPath, flushThresholdBytes)); + ServiceConfig serviceConfig = new ServiceConfig(BASE_PORT, BASE_URL, List.of(BASE_URL), dataPath); Worker worker = new Worker(new WorkerConfig()); ServerImpl server = new ServerImpl(serviceConfig, dao, worker); diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index d669484ff..f7f6143ba 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -20,26 +20,40 @@ import java.io.IOException; import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Objects; import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; public class ServerImpl extends HttpServer { private final Dao dao; private final ExecutorService executorService; + private final HttpClient httpClient; + private final ConsistentHashing consistentHashing; private static final Logger log = LoggerFactory.getLogger(ServerImpl.class); + + private final String selfUrl; private static final Set METHODS = Set.of( Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE ); public static final String TOO_MANY_REQUESTS = "429 Too Many Requests"; - public ServerImpl(ServiceConfig config, Dao dao, Worker worker) throws IOException { + public ServerImpl(ServiceConfig config, Dao dao, Worker worker, + ConsistentHashing consistentHashing) throws IOException { super(createServerConfig(config)); this.dao = dao; this.executorService = worker.getExecutorService(); + this.consistentHashing = consistentHashing; + this.selfUrl = config.selfUrl(); + this.httpClient = HttpClient.newBuilder() + .executor(Executors.newFixedThreadPool(2)).build(); } private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { @@ -140,8 +154,14 @@ private void processingRequest(Request request, HttpSession session, long proces return; } + String param = request.getParameter("id="); try { - super.handleRequest(request, session); + String nodeUrl = consistentHashing.getNode(param); + if (Objects.equals(selfUrl, nodeUrl)) { + super.handleRequest(request, session); + } else { + handleProxyRequest(request, session, nodeUrl, param); + } } catch (Exception e) { if (e.getClass() == HttpException.class) { session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); @@ -151,4 +171,69 @@ private void processingRequest(Request request, HttpSession session, long proces } } } + + private static final Map httpCodeMapping = Map.of( + HttpURLConnection.HTTP_OK, Response.OK, + HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, + HttpURLConnection.HTTP_CREATED, Response.CREATED, + HttpURLConnection.HTTP_BAD_REQUEST, Response.BAD_REQUEST, + HttpURLConnection.HTTP_INTERNAL_ERROR, Response.INTERNAL_ERROR, + HttpURLConnection.HTTP_NOT_FOUND, Response.NOT_FOUND + ); + + private void handleProxyRequest(Request request, HttpSession session, String nodeUrl, String params) { + HttpRequest httpRequest; + HttpRequest.Builder builder = HttpRequest.newBuilder(URI.create(nodeUrl + "/v0/entity?id=" + params)); + switch (request.getMethod()) { + case Request.METHOD_GET -> { + httpRequest = builder.GET().build(); + } + case Request.METHOD_PUT -> { + byte[] body = request.getBody(); + if (body == null) { + try { + session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); + } catch (IOException e) { + log.error("Error sending response", e); + } + return; + } + httpRequest = builder.PUT(HttpRequest.BodyPublishers.ofByteArray(body)).build(); + } + case Request.METHOD_DELETE -> { + httpRequest = builder.DELETE().build(); + } + default -> { + try { + session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); + } catch (IOException e) { + log.error("Error sending response", e); + } + return; + } + } + + try { + HttpResponse httpResponse = httpClient + .sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) + .get(); + + String statusCode = httpCodeMapping.getOrDefault(httpResponse.statusCode(), null); + if (statusCode != null) { + try { + session.sendResponse(new Response(statusCode, httpResponse.body())); + } catch (IOException e) { + log.error("Error sending response", e); + } + } else { + try { + session.sendResponse(new Response(Response.INTERNAL_ERROR, httpResponse.body())); + } catch (IOException e) { + log.error("Error sending response", e); + } + } + } catch (InterruptedException | ExecutionException e) { + Thread.currentThread().interrupt(); + } + } } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index f007d83a2..aec993cfa 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -8,37 +8,42 @@ import ru.vk.itmo.test.reference.dao.ReferenceDao; import java.io.IOException; +import java.util.List; import java.util.concurrent.CompletableFuture; public class ServiceImpl implements Service { + private static final long FLUSHING_THRESHOLD_BYTES = 1024 * 1024; + private final ServiceConfig config; private ServerImpl server; private Dao dao; private Worker worker; + private ConsistentHashing consistentHashing; public ServiceImpl(ServiceConfig config) { this.config = config; } @Override - public CompletableFuture start() throws IOException { - dao = new ReferenceDao(new Config(config.workingDir(), 1024 * 1024)); + public synchronized CompletableFuture start() throws IOException { + dao = new ReferenceDao(new Config(config.workingDir(), FLUSHING_THRESHOLD_BYTES)); worker = new Worker(new WorkerConfig()); - server = new ServerImpl(config, dao, worker); + consistentHashing = new ConsistentHashing(); + server = new ServerImpl(config, dao, worker, consistentHashing); server.start(); return CompletableFuture.completedFuture(null); } @Override - public CompletableFuture stop() throws IOException { + public synchronized CompletableFuture stop() throws IOException { server.stop(); worker.shutdownAndAwaitTermination(); dao.close(); return CompletableFuture.completedFuture(null); } - @ServiceFactory(stage = 2) + @ServiceFactory(stage = 3) public static class Factory implements ServiceFactory.Factory { @Override From 76c28eec3035ccd9c1711192e2d2a7eb4765149d Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 14 Mar 2024 00:31:30 +0300 Subject: [PATCH 24/60] Sketches --- .../tuzikovalexandr/ConsistentHashing.java | 30 ++++++++++++------- .../vk/itmo/test/tuzikovalexandr/Server.java | 10 ++++++- .../itmo/test/tuzikovalexandr/ServerImpl.java | 26 ++++++++++++++-- .../test/tuzikovalexandr/ServiceImpl.java | 10 +++++-- 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index 321c2aee8..a93399e3a 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -1,33 +1,41 @@ package ru.vk.itmo.test.tuzikovalexandr; +import java.util.List; import java.util.SortedMap; import java.util.TreeMap; public class ConsistentHashing { - private final SortedMap circle = new TreeMap<>(); + private final SortedMap circle; - public ConsistentHashing() { + public ConsistentHashing(List clusterUrls, int numbOfVirtualNodes) { + circle = new TreeMap<>(); + for (String clusterUrl : clusterUrls) { + for (int i = 0; i < numbOfVirtualNodes; i++) { + addNode(i, clusterUrl); + } + } } - public void addNode(String node) { - int hash = getHash(node); + public void addNode(int numOfNode, String node) { + int hash = getHash(numOfNode + node); circle.put(hash, node); } - public void removeNode(String node) { - int hash = getHash(node); - circle.remove(hash); - } +// public void removeNode(String node) { +// int hash = getHash(node); +// circle.remove(hash); +// } - public String getNode(Object key) { + public String getNode(String key) { if (circle.isEmpty()) { return null; } - int hash = getHash(key.toString()); + int hash = getHash(key); if (!circle.containsKey(hash)) { - hash = circle.firstKey(); + SortedMap tailMap = circle.tailMap(hash); + hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey(); } return circle.get(hash); diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index 6072052c3..c12a9c264 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -27,7 +27,15 @@ public static void main(String[] args) throws IOException { ServiceConfig serviceConfig = new ServiceConfig(BASE_PORT, BASE_URL, List.of(BASE_URL), dataPath); Worker worker = new Worker(new WorkerConfig()); - ServerImpl server = new ServerImpl(serviceConfig, dao, worker); + List clusterUrls = List.of( + BASE_URL + ":" + BASE_PORT, + BASE_URL + ":" + "11111", + BASE_URL + ":" + "22222" + ); + + ConsistentHashing consistentHashing = new ConsistentHashing(clusterUrls, 5); + + ServerImpl server = new ServerImpl(serviceConfig, dao, worker, consistentHashing); server.start(); } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index f7f6143ba..528aebf0c 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -29,7 +29,12 @@ import java.util.Map; import java.util.Objects; import java.util.Set; -import java.util.concurrent.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; public class ServerImpl extends HttpServer { @@ -181,6 +186,20 @@ private void processingRequest(Request request, HttpSession session, long proces HttpURLConnection.HTTP_NOT_FOUND, Response.NOT_FOUND ); + private static void sendExceptionInfo(HttpSession session, Exception exception) { + try { + String responseCode; + if (exception.getClass().equals(TimeoutException.class)) { + responseCode = Response.REQUEST_TIMEOUT; + } else { + responseCode = Response.INTERNAL_ERROR; + } + session.sendResponse(new Response(responseCode, exception.getMessage().getBytes(StandardCharsets.UTF_8))); + } catch (IOException e) { + log.error("Error while sending exception info", e); + } + } + private void handleProxyRequest(Request request, HttpSession session, String nodeUrl, String params) { HttpRequest httpRequest; HttpRequest.Builder builder = HttpRequest.newBuilder(URI.create(nodeUrl + "/v0/entity?id=" + params)); @@ -232,8 +251,11 @@ private void handleProxyRequest(Request request, HttpSession session, String nod log.error("Error sending response", e); } } - } catch (InterruptedException | ExecutionException e) { + } catch (InterruptedException e) { Thread.currentThread().interrupt(); + sendExceptionInfo(session, e); + } catch (ExecutionException e) { + sendExceptionInfo(session, e); } } } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index aec993cfa..9ab6553c8 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -8,18 +8,19 @@ import ru.vk.itmo.test.reference.dao.ReferenceDao; import java.io.IOException; -import java.util.List; import java.util.concurrent.CompletableFuture; public class ServiceImpl implements Service { private static final long FLUSHING_THRESHOLD_BYTES = 1024 * 1024; + private static final int NUMBER_OF_VIRTUAL_NODES = 5; private final ServiceConfig config; private ServerImpl server; private Dao dao; private Worker worker; private ConsistentHashing consistentHashing; + private Boolean isClosed = false; public ServiceImpl(ServiceConfig config) { this.config = config; @@ -29,17 +30,22 @@ public ServiceImpl(ServiceConfig config) { public synchronized CompletableFuture start() throws IOException { dao = new ReferenceDao(new Config(config.workingDir(), FLUSHING_THRESHOLD_BYTES)); worker = new Worker(new WorkerConfig()); - consistentHashing = new ConsistentHashing(); + consistentHashing = new ConsistentHashing(config.clusterUrls(), NUMBER_OF_VIRTUAL_NODES); server = new ServerImpl(config, dao, worker, consistentHashing); server.start(); + isClosed = false; return CompletableFuture.completedFuture(null); } @Override public synchronized CompletableFuture stop() throws IOException { + if (isClosed) { + return CompletableFuture.completedFuture(null); + } server.stop(); worker.shutdownAndAwaitTermination(); dao.close(); + isClosed = true; return CompletableFuture.completedFuture(null); } From 16e52a13cb0279866e94b71d4a1d29d69325896d Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 14 Mar 2024 10:57:03 +0300 Subject: [PATCH 25/60] Stage 3 --- .../itmo/test/tuzikovalexandr/ServerImpl.java | 88 ++++++++++--------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 528aebf0c..b526ea8a4 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -49,6 +49,15 @@ public class ServerImpl extends HttpServer { Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE ); public static final String TOO_MANY_REQUESTS = "429 Too Many Requests"; + public static final int REQUEST_TIMEOUT = 1000; + private static final Map HTTP_CODE = Map.of( + HttpURLConnection.HTTP_OK, Response.OK, + HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, + HttpURLConnection.HTTP_CREATED, Response.CREATED, + HttpURLConnection.HTTP_NOT_FOUND, Response.NOT_FOUND, + HttpURLConnection.HTTP_BAD_REQUEST, Response.BAD_REQUEST, + HttpURLConnection.HTTP_INTERNAL_ERROR, Response.INTERNAL_ERROR + ); public ServerImpl(ServiceConfig config, Dao dao, Worker worker, ConsistentHashing consistentHashing) throws IOException { @@ -177,16 +186,7 @@ private void processingRequest(Request request, HttpSession session, long proces } } - private static final Map httpCodeMapping = Map.of( - HttpURLConnection.HTTP_OK, Response.OK, - HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, - HttpURLConnection.HTTP_CREATED, Response.CREATED, - HttpURLConnection.HTTP_BAD_REQUEST, Response.BAD_REQUEST, - HttpURLConnection.HTTP_INTERNAL_ERROR, Response.INTERNAL_ERROR, - HttpURLConnection.HTTP_NOT_FOUND, Response.NOT_FOUND - ); - - private static void sendExceptionInfo(HttpSession session, Exception exception) { + private void sendException(HttpSession session, Exception exception) { try { String responseCode; if (exception.getClass().equals(TimeoutException.class)) { @@ -196,66 +196,68 @@ private static void sendExceptionInfo(HttpSession session, Exception exception) } session.sendResponse(new Response(responseCode, exception.getMessage().getBytes(StandardCharsets.UTF_8))); } catch (IOException e) { - log.error("Error while sending exception info", e); + log.error("Error sending exception", e); } } - private void handleProxyRequest(Request request, HttpSession session, String nodeUrl, String params) { - HttpRequest httpRequest; + private void sendResponse(HttpSession session, Response response) { + try { + session.sendResponse(response); + } catch (IOException e) { + log.error("Error sending response", e); + session.scheduleClose(); + } + } + + private HttpRequest createProxyRequest(Request request, String nodeUrl, String params) { HttpRequest.Builder builder = HttpRequest.newBuilder(URI.create(nodeUrl + "/v0/entity?id=" + params)); switch (request.getMethod()) { case Request.METHOD_GET -> { - httpRequest = builder.GET().build(); + return builder.GET().build(); } case Request.METHOD_PUT -> { byte[] body = request.getBody(); if (body == null) { - try { - session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); - } catch (IOException e) { - log.error("Error sending response", e); - } - return; + return null; } - httpRequest = builder.PUT(HttpRequest.BodyPublishers.ofByteArray(body)).build(); + return builder.PUT(HttpRequest.BodyPublishers.ofByteArray(body)).build(); } case Request.METHOD_DELETE -> { - httpRequest = builder.DELETE().build(); + return builder.DELETE().build(); } default -> { - try { - session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); - } catch (IOException e) { - log.error("Error sending response", e); - } - return; + return null; } } + } + private void sendProxyRequest(HttpSession session, HttpRequest httpRequest) { try { HttpResponse httpResponse = httpClient .sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) - .get(); + .get(REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); - String statusCode = httpCodeMapping.getOrDefault(httpResponse.statusCode(), null); + String statusCode = HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); if (statusCode != null) { - try { - session.sendResponse(new Response(statusCode, httpResponse.body())); - } catch (IOException e) { - log.error("Error sending response", e); - } + sendResponse(session, new Response(statusCode, httpResponse.body())); } else { - try { - session.sendResponse(new Response(Response.INTERNAL_ERROR, httpResponse.body())); - } catch (IOException e) { - log.error("Error sending response", e); - } + sendResponse(session, new Response(Response.INTERNAL_ERROR, httpResponse.body())); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); - sendExceptionInfo(session, e); - } catch (ExecutionException e) { - sendExceptionInfo(session, e); + sendException(session, e); + } catch (ExecutionException | TimeoutException e) { + sendException(session, e); + } + } + + private void handleProxyRequest(Request request, HttpSession session, String nodeUrl, String params) { + final HttpRequest httpRequest = createProxyRequest(request, nodeUrl, params); + + if (httpRequest != null) { + sendProxyRequest(session, httpRequest); + } else { + sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); } } } From 7432db0f5add4e9501d37cb136b9dd6795f33be3 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 14 Mar 2024 11:06:58 +0300 Subject: [PATCH 26/60] Fix bugs --- .../itmo/test/tuzikovalexandr/ConsistentHashing.java | 5 ----- .../ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 12 +++++++++--- .../ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java | 3 +-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index a93399e3a..2295a5483 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -22,11 +22,6 @@ public void addNode(int numOfNode, String node) { circle.put(hash, node); } -// public void removeNode(String node) { -// int hash = getHash(node); -// circle.remove(hash); -// } - public String getNode(String key) { if (circle.isEmpty()) { return null; diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index b526ea8a4..6c7d695d1 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -168,13 +168,19 @@ private void processingRequest(Request request, HttpSession session, long proces return; } - String param = request.getParameter("id="); + String paramId = request.getParameter("id="); + + if (paramId == null || paramId.isEmpty()) { + sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); + return; + } + try { - String nodeUrl = consistentHashing.getNode(param); + String nodeUrl = consistentHashing.getNode(paramId); if (Objects.equals(selfUrl, nodeUrl)) { super.handleRequest(request, session); } else { - handleProxyRequest(request, session, nodeUrl, param); + handleProxyRequest(request, session, nodeUrl, paramId); } } catch (Exception e) { if (e.getClass() == HttpException.class) { diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index 9ab6553c8..57af68a64 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -19,7 +19,6 @@ public class ServiceImpl implements Service { private ServerImpl server; private Dao dao; private Worker worker; - private ConsistentHashing consistentHashing; private Boolean isClosed = false; public ServiceImpl(ServiceConfig config) { @@ -30,7 +29,7 @@ public ServiceImpl(ServiceConfig config) { public synchronized CompletableFuture start() throws IOException { dao = new ReferenceDao(new Config(config.workingDir(), FLUSHING_THRESHOLD_BYTES)); worker = new Worker(new WorkerConfig()); - consistentHashing = new ConsistentHashing(config.clusterUrls(), NUMBER_OF_VIRTUAL_NODES); + ConsistentHashing consistentHashing = new ConsistentHashing(config.clusterUrls(), NUMBER_OF_VIRTUAL_NODES); server = new ServerImpl(config, dao, worker, consistentHashing); server.start(); isClosed = false; From 7cc056a9c175d999760acf9dd8f92b68f89f7769 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 20 Mar 2024 17:27:06 +0300 Subject: [PATCH 27/60] Add report --- .../vk/itmo/test/tuzikovalexandr/Server.java | 30 +- .../itmo/test/tuzikovalexandr/ServerImpl.java | 35 +- .../stage3/put-profile-1th-1con-3000.txt | 78 + .../results/stage3/put-profile-1th-alloc.html | 2121 +++++ .../results/stage3/put-profile-1th-cpu.html | 8094 +++++++++++++++++ .../results/stage3/put-profile-1th-lock.html | 572 ++ .../stage3/put-profile-8th-1000con-80000.txt | 136 + .../results/stage3/put-profile-8th-alloc.html | 552 ++ .../results/stage3/put-profile-8th-cpu.html | 5158 +++++++++++ .../results/stage3/put-profile-8th-lock.html | 367 + .../tuzikovalexandr/results/stage3/report.md | 42 + 11 files changed, 17150 insertions(+), 35 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-1con-3000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-1000con-80000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/report.md diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index c12a9c264..2bddbb19a 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.List; public final class Server { @@ -19,24 +20,31 @@ private Server() { } public static void main(String[] args) throws IOException { + int clusterSize = 3; long flushThresholdBytes = 1024 * 1024; - Path dataPath = Files.createTempDirectory("data"); + List clusterUrls = new ArrayList<>(); + int tempPortValue; + for (int i = 0; i < clusterSize; i++) { + tempPortValue = BASE_PORT + i * 1000; + clusterUrls.add(BASE_URL + ":" + tempPortValue); + } - Dao dao = new ReferenceDao(new Config(dataPath, flushThresholdBytes)); - ServiceConfig serviceConfig = new ServiceConfig(BASE_PORT, BASE_URL, List.of(BASE_URL), dataPath); Worker worker = new Worker(new WorkerConfig()); - List clusterUrls = List.of( - BASE_URL + ":" + BASE_PORT, - BASE_URL + ":" + "11111", - BASE_URL + ":" + "22222" - ); + for (int i = 0; i < clusterSize; i++) { + Path dataPath = Files.createTempDirectory("data"); - ConsistentHashing consistentHashing = new ConsistentHashing(clusterUrls, 5); + Dao dao = new ReferenceDao(new Config(dataPath, flushThresholdBytes)); - ServerImpl server = new ServerImpl(serviceConfig, dao, worker, consistentHashing); + ServiceConfig serviceConfig = new ServiceConfig(BASE_PORT + i * 1000, + clusterUrls.get(i), clusterUrls, dataPath); - server.start(); + ConsistentHashing consistentHashing = new ConsistentHashing(clusterUrls, 15); + + ServerImpl server = new ServerImpl(serviceConfig, dao, worker, consistentHashing); + + server.start(); + } } } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 6c7d695d1..b7072beee 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -49,7 +49,7 @@ public class ServerImpl extends HttpServer { Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE ); public static final String TOO_MANY_REQUESTS = "429 Too Many Requests"; - public static final int REQUEST_TIMEOUT = 1000; + public static final int REQUEST_TIMEOUT = 10_000; private static final Map HTTP_CODE = Map.of( HttpURLConnection.HTTP_OK, Response.OK, HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, @@ -95,7 +95,7 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti @Override public void handleRequest(Request request, HttpSession session) throws IOException { try { - long processingStartTime = System.nanoTime(); + long processingStartTime = System.currentTimeMillis(); executorService.execute(() -> { try { processingRequest(request, session, processingStartTime); @@ -163,7 +163,7 @@ private MemorySegment fromString(String data) { } private void processingRequest(Request request, HttpSession session, long processingStartTime) throws IOException { - if (System.nanoTime() - processingStartTime > TimeUnit.SECONDS.toNanos(2)) { + if (System.currentTimeMillis() - processingStartTime > 300) { session.sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); return; } @@ -177,6 +177,7 @@ private void processingRequest(Request request, HttpSession session, long proces try { String nodeUrl = consistentHashing.getNode(paramId); + log.error(nodeUrl); if (Objects.equals(selfUrl, nodeUrl)) { super.handleRequest(request, session); } else { @@ -200,7 +201,7 @@ private void sendException(HttpSession session, Exception exception) { } else { responseCode = Response.INTERNAL_ERROR; } - session.sendResponse(new Response(responseCode, exception.getMessage().getBytes(StandardCharsets.UTF_8))); + session.sendResponse(new Response(responseCode, Response.EMPTY)); } catch (IOException e) { log.error("Error sending exception", e); } @@ -216,25 +217,11 @@ private void sendResponse(HttpSession session, Response response) { } private HttpRequest createProxyRequest(Request request, String nodeUrl, String params) { - HttpRequest.Builder builder = HttpRequest.newBuilder(URI.create(nodeUrl + "/v0/entity?id=" + params)); - switch (request.getMethod()) { - case Request.METHOD_GET -> { - return builder.GET().build(); - } - case Request.METHOD_PUT -> { - byte[] body = request.getBody(); - if (body == null) { - return null; - } - return builder.PUT(HttpRequest.BodyPublishers.ofByteArray(body)).build(); - } - case Request.METHOD_DELETE -> { - return builder.DELETE().build(); - } - default -> { - return null; - } - } + return HttpRequest.newBuilder(URI.create(nodeUrl + "/v0/entity?id=" + params)) + .method(request.getMethodName(), request.getBody() == null + ? HttpRequest.BodyPublishers.noBody() + : HttpRequest.BodyPublishers.ofByteArray(request.getBody())) + .build(); } private void sendProxyRequest(HttpSession session, HttpRequest httpRequest) { @@ -258,7 +245,7 @@ private void sendProxyRequest(HttpSession session, HttpRequest httpRequest) { } private void handleProxyRequest(Request request, HttpSession session, String nodeUrl, String params) { - final HttpRequest httpRequest = createProxyRequest(request, nodeUrl, params); + HttpRequest httpRequest = createProxyRequest(request, nodeUrl, params); if (httpRequest != null) { sendProxyRequest(session, httpRequest); diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-1con-3000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-1con-3000.txt new file mode 100644 index 000000000..ee2736639 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-1con-3000.txt @@ -0,0 +1,78 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 5175.185ms, rate sampling interval: 17612ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 18.95s 5.23s 27.69s 59.46% + Req/Sec 239.00 0.00 239.00 100.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 19.32s + 75.000% 23.40s + 90.000% 26.05s + 99.000% 27.61s + 99.900% 27.69s + 99.990% 27.71s + 99.999% 27.71s +100.000% 27.71s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 9330.687 0.000000 3 1.00 + 11567.103 0.100000 483 1.11 + 13508.607 0.200000 961 1.25 + 15155.199 0.300000 1442 1.43 + 17006.591 0.400000 1928 1.67 + 19316.735 0.500000 2407 2.00 + 20152.319 0.550000 2643 2.22 + 21037.055 0.600000 2884 2.50 + 21921.791 0.650000 3128 2.86 + 22855.679 0.700000 3365 3.33 + 23396.351 0.750000 3611 4.00 + 23642.111 0.775000 3724 4.44 + 24133.631 0.800000 3846 5.00 + 24494.079 0.825000 3974 5.71 + 24936.447 0.850000 4088 6.67 + 25460.735 0.875000 4209 8.00 + 25772.031 0.887500 4264 8.89 + 26050.559 0.900000 4332 10.00 + 26247.167 0.912500 4384 11.43 + 26591.231 0.925000 4447 13.33 + 26869.759 0.937500 4515 16.00 + 26902.527 0.943750 4535 17.78 + 27049.983 0.950000 4563 20.00 + 27148.287 0.956250 4594 22.86 + 27262.975 0.962500 4625 26.67 + 27361.279 0.968750 4655 32.00 + 27443.199 0.971875 4675 35.56 + 27459.583 0.975000 4688 40.00 + 27475.967 0.978125 4699 45.71 + 27508.735 0.981250 4721 53.33 + 27525.119 0.984375 4734 64.00 + 27557.887 0.985938 4736 71.11 + 27590.655 0.987500 4751 80.00 + 27590.655 0.989062 4751 91.43 + 27607.039 0.990625 4765 106.67 + 27623.423 0.992188 4768 128.00 + 27639.807 0.992969 4780 142.22 + 27639.807 0.993750 4780 160.00 + 27639.807 0.994531 4780 182.86 + 27656.191 0.995313 4788 213.33 + 27656.191 0.996094 4788 256.00 + 27656.191 0.996484 4788 284.44 + 27656.191 0.996875 4788 320.00 + 27688.959 0.997266 4798 365.71 + 27688.959 0.997656 4798 426.67 + 27688.959 0.998047 4798 512.00 + 27688.959 0.998242 4798 568.89 + 27688.959 0.998437 4798 640.00 + 27688.959 0.998633 4798 731.43 + 27688.959 0.998828 4798 853.33 + 27705.343 0.999023 4803 1024.00 + 27705.343 1.000000 4803 inf +#[Mean = 18951.882, StdDeviation = 5231.594] +#[Max = 27688.960, Total count = 4803] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 6899 requests in 30.00s, 451.40KB read +Requests/sec: 229.95 +Transfer/sec: 15.05KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-alloc.html new file mode 100644 index 000000000..17287994e --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-alloc.html @@ -0,0 +1,2121 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-cpu.html new file mode 100644 index 000000000..178b73d09 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-cpu.html @@ -0,0 +1,8094 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-lock.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-lock.html new file mode 100644 index 000000000..10259baa0 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-1th-lock.html @@ -0,0 +1,572 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-1000con-80000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-1000con-80000.txt new file mode 100644 index 000000000..9a494780e --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-1000con-80000.txt @@ -0,0 +1,136 @@ +Running 30s test @ http://localhost:8080 + 8 threads and 1000 connections + Thread calibration: mean lat.: 3188.326ms, rate sampling interval: 7675ms + Thread calibration: mean lat.: 3426.180ms, rate sampling interval: 8921ms + Thread calibration: mean lat.: 3349.114ms, rate sampling interval: 8781ms + Thread calibration: mean lat.: 3401.370ms, rate sampling interval: 8978ms + Thread calibration: mean lat.: 3381.618ms, rate sampling interval: 8298ms + Thread calibration: mean lat.: 3241.562ms, rate sampling interval: 7921ms + Thread calibration: mean lat.: 3338.233ms, rate sampling interval: 8093ms + Thread calibration: mean lat.: 3312.152ms, rate sampling interval: 8437ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 6.99s 1.47s 10.26s 59.91% + Req/Sec 7.41k 316.45 7.96k 62.50% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 7.02s + 75.000% 8.16s + 90.000% 8.93s + 99.000% 9.72s + 99.900% 9.99s + 99.990% 10.12s + 99.999% 10.21s +100.000% 10.26s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 3772.415 0.000000 1 1.00 + 4849.663 0.100000 115430 1.11 + 5390.335 0.200000 230323 1.25 + 6225.919 0.300000 345601 1.43 + 6692.863 0.400000 460894 1.67 + 7024.639 0.500000 576729 2.00 + 7221.247 0.550000 633818 2.22 + 7442.431 0.600000 690906 2.50 + 7692.287 0.650000 749250 2.86 + 7938.047 0.700000 806387 3.33 + 8163.327 0.750000 864624 4.00 + 8278.015 0.775000 893197 4.44 + 8396.799 0.800000 922081 5.00 + 8519.679 0.825000 951546 5.71 + 8650.751 0.850000 978967 6.67 + 8790.015 0.875000 1007743 8.00 + 8863.743 0.887500 1023381 8.89 + 8929.279 0.900000 1037609 10.00 + 8994.815 0.912500 1051384 11.43 + 9076.735 0.925000 1066460 13.33 + 9166.847 0.937500 1080672 16.00 + 9215.999 0.943750 1087730 17.78 + 9265.151 0.950000 1094342 20.00 + 9330.687 0.956250 1101781 22.86 + 9396.223 0.962500 1108646 26.67 + 9469.951 0.968750 1116185 32.00 + 9502.719 0.971875 1119521 35.56 + 9535.487 0.975000 1123086 40.00 + 9576.447 0.978125 1127094 45.71 + 9609.215 0.981250 1130748 53.33 + 9641.983 0.984375 1134058 64.00 + 9658.367 0.985938 1135687 71.11 + 9682.943 0.987500 1137733 80.00 + 9699.327 0.989062 1139007 91.43 + 9732.095 0.990625 1141273 106.67 + 9756.671 0.992188 1142813 128.00 + 9773.055 0.992969 1143783 142.22 + 9789.439 0.993750 1144763 160.00 + 9797.631 0.994531 1145215 182.86 + 9822.207 0.995313 1146235 213.33 + 9846.783 0.996094 1147060 256.00 + 9863.167 0.996484 1147626 284.44 + 9879.551 0.996875 1148068 320.00 + 9895.935 0.997266 1148519 365.71 + 9912.319 0.997656 1148884 426.67 + 9928.703 0.998047 1149245 512.00 + 9936.895 0.998242 1149484 568.89 + 9953.279 0.998437 1149773 640.00 + 9961.471 0.998633 1149914 731.43 + 9977.855 0.998828 1150203 853.33 + 9994.239 0.999023 1150471 1024.00 + 10002.431 0.999121 1150571 1137.78 + 10010.623 0.999219 1150687 1280.00 + 10018.815 0.999316 1150769 1462.86 + 10027.007 0.999414 1150888 1706.67 + 10035.199 0.999512 1151001 2048.00 + 10035.199 0.999561 1151001 2275.56 + 10043.391 0.999609 1151074 2560.00 + 10051.583 0.999658 1151129 2925.71 + 10059.775 0.999707 1151175 3413.33 + 10067.967 0.999756 1151216 4096.00 + 10076.159 0.999780 1151250 4551.11 + 10084.351 0.999805 1151272 5120.00 + 10092.543 0.999829 1151307 5851.43 + 10100.735 0.999854 1151339 6826.67 + 10108.927 0.999878 1151356 8192.00 + 10117.119 0.999890 1151377 9102.22 + 10117.119 0.999902 1151377 10240.00 + 10125.311 0.999915 1151394 11702.86 + 10133.503 0.999927 1151406 13653.33 + 10141.695 0.999939 1151423 16384.00 + 10141.695 0.999945 1151423 18204.44 + 10149.887 0.999951 1151431 20480.00 + 10158.079 0.999957 1151438 23405.71 + 10166.271 0.999963 1151444 27306.67 + 10174.463 0.999969 1151453 32768.00 + 10174.463 0.999973 1151453 36408.89 + 10182.655 0.999976 1151460 40960.00 + 10182.655 0.999979 1151460 46811.43 + 10190.847 0.999982 1151463 54613.33 + 10199.039 0.999985 1151469 65536.00 + 10199.039 0.999986 1151469 72817.78 + 10207.231 0.999988 1151474 81920.00 + 10207.231 0.999989 1151474 93622.86 + 10207.231 0.999991 1151474 109226.67 + 10223.615 0.999992 1151478 131072.00 + 10223.615 0.999993 1151478 145635.56 + 10223.615 0.999994 1151478 163840.00 + 10223.615 0.999995 1151478 187245.71 + 10231.807 0.999995 1151482 218453.33 + 10231.807 0.999996 1151482 262144.00 + 10231.807 0.999997 1151482 291271.11 + 10231.807 0.999997 1151482 327680.00 + 10231.807 0.999997 1151482 374491.43 + 10231.807 0.999998 1151482 436906.67 + 10231.807 0.999998 1151482 524288.00 + 10256.383 0.999998 1151483 582542.22 + 10256.383 0.999998 1151483 655360.00 + 10256.383 0.999999 1151483 748982.86 + 10256.383 0.999999 1151483 873813.33 + 10256.383 0.999999 1151483 1048576.00 + 10264.575 0.999999 1151484 1165084.44 + 10264.575 1.000000 1151484 inf +#[Mean = 6987.950, StdDeviation = 1465.314] +#[Max = 10256.384, Total count = 1151484] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 1590872 requests in 30.00s, 101.65MB read +Requests/sec: 53024.50 +Transfer/sec: 3.39MB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-alloc.html new file mode 100644 index 000000000..193f14666 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-alloc.html @@ -0,0 +1,552 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-cpu.html new file mode 100644 index 000000000..768fdebf3 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-cpu.html @@ -0,0 +1,5158 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-lock.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-lock.html new file mode 100644 index 000000000..26ea2d0a5 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/put-profile-8th-lock.html @@ -0,0 +1,367 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/report.md new file mode 100644 index 000000000..818a815fc --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/report.md @@ -0,0 +1,42 @@ +## PUT 30000 30s 8 threads 1000 con + +Сначала попробуем проверить, насколько изменилось время обработки запросов с добавлением нового кода. + +``` + было стало + 50.000% 523.78ms 7.02s + 75.000% 954.37ms 8.16s + 90.000% 1.33s 8.93s + 99.000% 1.75s 9.72s + 99.900% 2.04s 9.99s + 99.990% 2.13s 10.12s + 99.999% 2.17s 10.21s +100.000% 2.19s 10.26s +``` + +Время обработки значительно увеличилось. Одно из предположений: было уменьшено количество ядер для виртуалки. + +## PUT 3000 30s 1 thread 1 con + +В процессе анализа были выявлены недостатки работы Consistent Hashing, постоянно берется хост +с наибольшим значением порта. Однако по перцентилям можно отметить увеличение времени обработки запроса, так как +накладываются дополнительные расходы на работу с клиентом. + +``` + 50.000% 19.32s + 75.000% 23.40s + 90.000% 26.05s + 99.000% 27.61s + 99.900% 27.69s + 99.990% 27.71s + 99.999% 27.71s +100.000% 27.71s +``` + +При анализе графа put-profile-1th-cpu.html можно заметить, что 11% ресурсов уходит на работу клиента. +Также добавляются аллокации клиента put-profile-1th-alloc.html 6%. + +Также пришлось уменьшить количество потоков и соединений для проверки работоспособности. + +## Улучшения +* Переработать хеш-функцию \ No newline at end of file From c3268c519a8e3bdc8a88f19f48672756a24c3208 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 20 Mar 2024 17:30:54 +0300 Subject: [PATCH 28/60] Add report --- .../ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index b7072beee..70da3833a 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -231,10 +231,10 @@ private void sendProxyRequest(HttpSession session, HttpRequest httpRequest) { .get(REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); String statusCode = HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); - if (statusCode != null) { - sendResponse(session, new Response(statusCode, httpResponse.body())); - } else { + if (statusCode == null) { sendResponse(session, new Response(Response.INTERNAL_ERROR, httpResponse.body())); + } else { + sendResponse(session, new Response(statusCode, httpResponse.body())); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); @@ -247,10 +247,10 @@ private void sendProxyRequest(HttpSession session, HttpRequest httpRequest) { private void handleProxyRequest(Request request, HttpSession session, String nodeUrl, String params) { HttpRequest httpRequest = createProxyRequest(request, nodeUrl, params); - if (httpRequest != null) { - sendProxyRequest(session, httpRequest); - } else { + if (httpRequest == null) { sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); + } else { + sendProxyRequest(session, httpRequest); } } } From dfbb2f4570051d377b259c84e744142986155a0a Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 20 Mar 2024 23:41:40 +0300 Subject: [PATCH 29/60] Add report --- .../itmo/test/tuzikovalexandr/ServerImpl.java | 3 +- .../test/tuzikovalexandr/WorkerConfig.java | 2 +- .../stage3/get-profile-1th-1con-5000.txt | 77 + .../results/stage3/get-profile-1th-alloc.html | 1884 +++++++ .../results/stage3/get-profile-1th-cpu.html | 4836 +++++++++++++++++ .../results/stage3/get-profile-1th-lock.html | 572 ++ .../tuzikovalexandr/results/stage3/report.md | 45 +- 7 files changed, 7415 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-1con-5000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-lock.html diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 70da3833a..056fa0b23 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -49,7 +49,7 @@ public class ServerImpl extends HttpServer { Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE ); public static final String TOO_MANY_REQUESTS = "429 Too Many Requests"; - public static final int REQUEST_TIMEOUT = 10_000; + public static final int REQUEST_TIMEOUT = 300; private static final Map HTTP_CODE = Map.of( HttpURLConnection.HTTP_OK, Response.OK, HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, @@ -177,7 +177,6 @@ private void processingRequest(Request request, HttpSession session, long proces try { String nodeUrl = consistentHashing.getNode(paramId); - log.error(nodeUrl); if (Objects.equals(selfUrl, nodeUrl)) { super.handleRequest(request, session); } else { diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/WorkerConfig.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/WorkerConfig.java index 6934c24cd..c18d6b656 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/WorkerConfig.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/WorkerConfig.java @@ -22,7 +22,7 @@ public final class WorkerConfig { public WorkerConfig() { this.corePoolSize = Runtime.getRuntime().availableProcessors(); this.maximumPoolSize = Runtime.getRuntime().availableProcessors(); - this.keepAliveTime = 30L; + this.keepAliveTime = 60L; this.unit = TimeUnit.SECONDS; this.workQueue = new LinkedBlockingDeque<>(MAX_QUEUE_SIZE); this.threadFactory = new CustomThreadFactory("w", true); diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-1con-5000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-1con-5000.txt new file mode 100644 index 000000000..ab5b0d75a --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-1con-5000.txt @@ -0,0 +1,77 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 4168.313ms, rate sampling interval: 16515ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 18.77s 5.49s 27.44s 56.74% + Req/Sec 404.00 0.00 404.00 100.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 19.55s + 75.000% 23.79s + 90.000% 25.85s + 99.000% 27.34s + 99.900% 27.46s + 99.990% 27.46s + 99.999% 27.46s +100.000% 27.46s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 9166.847 0.000000 5 1.00 + 10993.663 0.100000 851 1.11 + 12951.551 0.200000 1690 1.25 + 14843.903 0.300000 2533 1.43 + 16793.599 0.400000 3377 1.67 + 19546.111 0.500000 4225 2.00 + 20578.303 0.550000 4650 2.22 + 21381.119 0.600000 5065 2.50 + 22003.711 0.650000 5488 2.86 + 22675.455 0.700000 5908 3.33 + 23789.567 0.750000 6333 4.00 + 24182.783 0.775000 6545 4.44 + 24526.847 0.800000 6762 5.00 + 24838.143 0.825000 6964 5.71 + 25231.359 0.850000 7177 6.67 + 25542.655 0.875000 7386 8.00 + 25690.111 0.887500 7492 8.89 + 25853.951 0.900000 7604 10.00 + 26132.479 0.912500 7706 11.43 + 26198.015 0.925000 7816 13.33 + 26263.551 0.937500 7929 16.00 + 26279.935 0.943750 7966 17.78 + 26329.087 0.950000 8019 20.00 + 26411.007 0.956250 8078 22.86 + 26492.927 0.962500 8125 26.67 + 26640.383 0.968750 8177 32.00 + 26722.303 0.971875 8202 35.56 + 26820.607 0.975000 8230 40.00 + 26918.911 0.978125 8257 45.71 + 27000.831 0.981250 8281 53.33 + 27197.439 0.984375 8311 64.00 + 27246.591 0.985938 8324 71.11 + 27295.743 0.987500 8335 80.00 + 27328.511 0.989062 8353 91.43 + 27344.895 0.990625 8364 106.67 + 27361.279 0.992188 8376 128.00 + 27377.663 0.992969 8384 142.22 + 27394.047 0.993750 8394 160.00 + 27394.047 0.994531 8394 182.86 + 27410.431 0.995313 8405 213.33 + 27426.815 0.996094 8416 256.00 + 27426.815 0.996484 8416 284.44 + 27426.815 0.996875 8416 320.00 + 27426.815 0.997266 8416 365.71 + 27443.199 0.997656 8427 426.67 + 27443.199 0.998047 8427 512.00 + 27443.199 0.998242 8427 568.89 + 27443.199 0.998437 8427 640.00 + 27459.583 0.998633 8439 731.43 + 27459.583 1.000000 8439 inf +#[Mean = 18771.046, StdDeviation = 5493.331] +#[Max = 27443.200, Total count = 8439] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 12686 requests in 30.00s, 851.37KB read + Non-2xx or 3xx responses: 9532 +Requests/sec: 422.89 +Transfer/sec: 28.38KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-alloc.html new file mode 100644 index 000000000..9e81f6bae --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-alloc.html @@ -0,0 +1,1884 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-cpu.html new file mode 100644 index 000000000..10998f078 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-cpu.html @@ -0,0 +1,4836 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-lock.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-lock.html new file mode 100644 index 000000000..b3b4ee9a1 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/get-profile-1th-lock.html @@ -0,0 +1,572 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/report.md index 818a815fc..4a88c9824 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage3/report.md @@ -38,5 +38,48 @@ Также пришлось уменьшить количество потоков и соединений для проверки работоспособности. +Еще уменьшилось количество запросов. 20000 уже не проходили, из них только около 1700 успевали пройти. +На 3000 тестирование вроде как работало без ошибок. + +## GET 5000 30s 1 thread 1 con + +До этого держал нагрузку на 80000 запросов 8 потоков и 1000 соединений. + +``` + 50.000% 19.55s + 75.000% 23.79s + 90.000% 25.85s + 99.000% 27.34s + 99.900% 27.46s + 99.990% 27.46s + 99.999% 27.46s +100.000% 27.46s +``` + +По результатам перцентилей с 5000 запросов работает также как с 80000, то есть результатами предыдущего этапа. + +## ALLOC + +PUT запросы: put-profile-1th-alloc.html. + +GET запросы: get-profile-1th-alloc.html. + +## CPU + +PUT запросы: put-profile-1th-cpu.html. +Воркеры работают с клиентом. Добавился селектор менеджер для управления соединениями клиента. Из расходов: +работа с responseAsync клиента - 33%; в нем же 25% - работа СompletableFuture. + +GET запросы: get-profile-1th-cpu.html. +Добавилась нагрузка на работу с клиентом. + +## LOCK + +В PUT запросах put-profile-1th-lock.html более 60% занимает работа SelectorManager, который используется http клиент. + +В GET запросах get-profile-1th-lock.html около 40% занимает работа SelectorManager. + +В основном все изменения, анализируя профили, связаны с тем, что добавились дополнительные расходы на http клиента. + ## Улучшения -* Переработать хеш-функцию \ No newline at end of file +* Переработать хеш-функцию, так как сейчас распределение данных неравномерное, судя по нагрузочному тестированию \ No newline at end of file From 018b2003409ce34aeed06557a7f8c09d634f7324 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 27 Mar 2024 13:15:12 +0300 Subject: [PATCH 30/60] Fix hash --- .../tuzikovalexandr/ConsistentHashing.java | 24 ++++++++++++------- .../vk/itmo/test/tuzikovalexandr/Server.java | 6 ++--- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index 2295a5483..fa522bfa6 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -1,11 +1,14 @@ package ru.vk.itmo.test.tuzikovalexandr; +import one.nio.util.Hash; + import java.util.List; +import java.util.NavigableMap; import java.util.SortedMap; import java.util.TreeMap; public class ConsistentHashing { - private final SortedMap circle; + private final NavigableMap circle; public ConsistentHashing(List clusterUrls, int numbOfVirtualNodes) { circle = new TreeMap<>(); @@ -18,7 +21,7 @@ public ConsistentHashing(List clusterUrls, int numbOfVirtualNodes) { } public void addNode(int numOfNode, String node) { - int hash = getHash(numOfNode + node); + final int hash = getHash(node + numOfNode); circle.put(hash, node); } @@ -27,16 +30,19 @@ public String getNode(String key) { return null; } - int hash = getHash(key); - if (!circle.containsKey(hash)) { - SortedMap tailMap = circle.tailMap(hash); - hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey(); - } + final int hash = getHash(key); + SortedMap tailMap = circle.tailMap(hash); + return (tailMap.isEmpty() ? circle.firstEntry() : tailMap.firstEntry()).getValue(); - return circle.get(hash); +// if (!circle.containsKey(hash)) { +// SortedMap tailMap = circle.tailMap(hash); +// hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey(); +// } +// +// return circle.get(hash); } private int getHash(String key) { - return key.hashCode(); + return Hash.murmur3(key); } } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index 2bddbb19a..2c89c6804 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -26,7 +26,7 @@ public static void main(String[] args) throws IOException { List clusterUrls = new ArrayList<>(); int tempPortValue; for (int i = 0; i < clusterSize; i++) { - tempPortValue = BASE_PORT + i * 1000; + tempPortValue = BASE_PORT + i; clusterUrls.add(BASE_URL + ":" + tempPortValue); } @@ -37,10 +37,10 @@ public static void main(String[] args) throws IOException { Dao dao = new ReferenceDao(new Config(dataPath, flushThresholdBytes)); - ServiceConfig serviceConfig = new ServiceConfig(BASE_PORT + i * 1000, + ServiceConfig serviceConfig = new ServiceConfig(BASE_PORT + i, clusterUrls.get(i), clusterUrls, dataPath); - ConsistentHashing consistentHashing = new ConsistentHashing(clusterUrls, 15); + ConsistentHashing consistentHashing = new ConsistentHashing(clusterUrls, 5); ServerImpl server = new ServerImpl(serviceConfig, dao, worker, consistentHashing); From 48d232204db8c459dcc10279a102a9641f20317f Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 27 Mar 2024 14:25:43 +0300 Subject: [PATCH 31/60] Change dao --- .../vk/itmo/test/tuzikovalexandr/Server.java | 4 +- .../itmo/test/tuzikovalexandr/ServerImpl.java | 14 +- .../test/tuzikovalexandr/ServiceImpl.java | 7 +- .../dao/BaseEntryWithTimestamp.java | 8 + .../tuzikovalexandr/dao/ByteArraySegment.java | 48 +++ .../vk/itmo/test/tuzikovalexandr/dao/Dao.java | 87 ++++++ .../dao/EntryWithTimestamp.java | 7 + .../test/tuzikovalexandr/dao/MemTable.java | 47 +++ .../dao/MemorySegmentComparator.java | 89 ++++++ .../dao/MergingEntryIterator.java | 70 +++++ .../tuzikovalexandr/dao/ReferenceDao.java | 288 ++++++++++++++++++ .../test/tuzikovalexandr/dao/SSTable.java | 207 +++++++++++++ .../tuzikovalexandr/dao/SSTableWriter.java | 170 +++++++++++ .../test/tuzikovalexandr/dao/SSTables.java | 162 ++++++++++ .../test/tuzikovalexandr/dao/TableSet.java | 203 ++++++++++++ .../dao/WeightedPeekingEntryIterator.java | 65 ++++ 16 files changed, 1464 insertions(+), 12 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/BaseEntryWithTimestamp.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/ByteArraySegment.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/Dao.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/EntryWithTimestamp.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MemTable.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MemorySegmentComparator.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MergingEntryIterator.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/ReferenceDao.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTable.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTableWriter.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTables.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/TableSet.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/WeightedPeekingEntryIterator.java diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index 2c89c6804..633a7dcfd 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -2,8 +2,8 @@ import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.Config; -import ru.vk.itmo.dao.Dao; -import ru.vk.itmo.test.reference.dao.ReferenceDao; +import ru.vk.itmo.test.tuzikovalexandr.dao.Dao; +import ru.vk.itmo.test.tuzikovalexandr.dao.ReferenceDao; import java.io.IOException; import java.nio.file.Files; diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 056fa0b23..e08b02a23 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -13,9 +13,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.vk.itmo.ServiceConfig; -import ru.vk.itmo.dao.BaseEntry; -import ru.vk.itmo.dao.Dao; -import ru.vk.itmo.dao.Entry; +import ru.vk.itmo.test.tuzikovalexandr.dao.BaseEntryWithTimestamp; +import ru.vk.itmo.test.tuzikovalexandr.dao.Dao; +import ru.vk.itmo.test.tuzikovalexandr.dao.EntryWithTimestamp; import java.io.IOException; import java.lang.foreign.MemorySegment; @@ -122,9 +122,9 @@ public Response getEntry(@Param(value = "id", required = true) String id) { } MemorySegment key = fromString(id); - Entry entry = dao.get(key); + EntryWithTimestamp entry = dao.get(key); - if (entry == null) { + if (entry == null || entry.value() == null) { return new Response(Response.NOT_FOUND, Response.EMPTY); } @@ -141,7 +141,7 @@ public Response putEntry(@Param(value = "id", required = true) String id, Reques MemorySegment key = fromString(id); MemorySegment value = MemorySegment.ofArray(request.getBody()); - dao.upsert(new BaseEntry<>(key, value)); + dao.upsert(new BaseEntryWithTimestamp(key, value, System.currentTimeMillis())); return new Response(Response.CREATED, Response.EMPTY); } @@ -153,7 +153,7 @@ public Response deleteEntry(@Param(value = "id", required = true) String id) { } MemorySegment key = fromString(id); - dao.upsert(new BaseEntry<>(key, null)); + dao.upsert(new BaseEntryWithTimestamp<>(key, null, System.currentTimeMillis())); return new Response(Response.ACCEPTED, Response.EMPTY); } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index 57af68a64..1402b58c0 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -3,9 +3,10 @@ import ru.vk.itmo.Service; import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.Config; -import ru.vk.itmo.dao.Dao; + import ru.vk.itmo.test.ServiceFactory; -import ru.vk.itmo.test.reference.dao.ReferenceDao; +import ru.vk.itmo.test.tuzikovalexandr.dao.Dao; +import ru.vk.itmo.test.tuzikovalexandr.dao.ReferenceDao; import java.io.IOException; import java.util.concurrent.CompletableFuture; @@ -48,7 +49,7 @@ public synchronized CompletableFuture stop() throws IOException { return CompletableFuture.completedFuture(null); } - @ServiceFactory(stage = 3) + @ServiceFactory(stage = 4) public static class Factory implements ServiceFactory.Factory { @Override diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/BaseEntryWithTimestamp.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/BaseEntryWithTimestamp.java new file mode 100644 index 000000000..0d9c1b139 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/BaseEntryWithTimestamp.java @@ -0,0 +1,8 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +public record BaseEntryWithTimestamp(D key, D value, long timestamp) implements EntryWithTimestamp { + @Override + public String toString() { + return "{" + key + ":" + value + ":" + timestamp + "}"; + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/ByteArraySegment.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/ByteArraySegment.java new file mode 100644 index 000000000..17fcae267 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/ByteArraySegment.java @@ -0,0 +1,48 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import java.io.IOException; +import java.lang.foreign.MemorySegment; +import java.nio.ByteBuffer; + +/** + * Growable buffer with {@link ByteBuffer} and {@link MemorySegment} interface. + * + * @author incubos + */ +final class ByteArraySegment { + private byte[] array; + private MemorySegment segment; + + ByteArraySegment(final int capacity) { + this.array = new byte[capacity]; + this.segment = MemorySegment.ofArray(array); + } + + void withArray(final ArrayConsumer consumer) throws IOException { + consumer.process(array); + } + + MemorySegment segment() { + return segment; + } + + void ensureCapacity(final long size) { + if (size > Integer.MAX_VALUE) { + throw new IllegalArgumentException("Too big!"); + } + + final int capacity = (int) size; + if (array.length >= capacity) { + return; + } + + // Grow to the nearest bigger power of 2 + final int newSize = Integer.highestOneBit(capacity) << 1; + array = new byte[newSize]; + segment = MemorySegment.ofArray(array); + } + + interface ArrayConsumer { + void process(byte[] array) throws IOException; + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/Dao.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/Dao.java new file mode 100644 index 000000000..52f35cb41 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/Dao.java @@ -0,0 +1,87 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import java.io.Closeable; +import java.io.IOException; +import java.util.Iterator; + +public interface Dao> extends Closeable { + /** + * Returns ordered iterator of entries with keys between from (inclusive) and to (exclusive). + * @param from lower bound of range (inclusive) + * @param to upper bound of range (exclusive) + * @return entries [from;to) + */ + Iterator get(D from, D to); + + /** + * Returns entry by key. Note: default implementation is far from optimal. + * @param key entry`s key + * @return entry + */ + default E get(D key) { + Iterator iterator = get(key, null); + if (!iterator.hasNext()) { + return null; + } + + E next = iterator.next(); + if (next.key().equals(key)) { + return next; + } + return null; + } + + /** + * Returns ordered iterator of all entries with keys from (inclusive). + * @param from lower bound of range (inclusive) + * @return entries with key >= from + */ + default Iterator allFrom(D from) { + return get(from, null); + } + + /** + * Returns ordered iterator of all entries with keys < to. + * @param to upper bound of range (exclusive) + * @return entries with key < to + */ + default Iterator allTo(D to) { + return get(null, to); + } + + /** + * Returns ordered iterator of all entries. + * @return all entries + */ + default Iterator all() { + return get(null, null); + } + + /** + * Inserts of replaces entry. + * @param entry element to upsert + */ + void upsert(E entry); + + /** + * Persists data (no-op by default). + */ + default void flush() throws IOException { + // Do nothing + } + + /** + * Compacts data (no-op by default). + */ + default void compact() throws IOException { + // Do nothing + } + + /* + * Releases Dao (calls flush by default). + */ + @Override + default void close() throws IOException { + flush(); + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/EntryWithTimestamp.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/EntryWithTimestamp.java new file mode 100644 index 000000000..c2e57cb0b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/EntryWithTimestamp.java @@ -0,0 +1,7 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +public interface EntryWithTimestamp { + D key(); + D value(); + long timestamp(); +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MemTable.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MemTable.java new file mode 100644 index 000000000..39b43c1fe --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MemTable.java @@ -0,0 +1,47 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import java.lang.foreign.MemorySegment; +import java.util.Iterator; +import java.util.NavigableMap; +import java.util.concurrent.ConcurrentSkipListMap; + +/** + * Memory table. + * + * @author incubos + */ +final class MemTable { + private final NavigableMap> map = + new ConcurrentSkipListMap<>( + MemorySegmentComparator.INSTANCE); + + boolean isEmpty() { + return map.isEmpty(); + } + + Iterator> get( + final MemorySegment from, + final MemorySegment to) { + if (from == null && to == null) { + // All + return map.values().iterator(); + } else if (from == null) { + // Head + return map.headMap(to).values().iterator(); + } else if (to == null) { + // Tail + return map.tailMap(from).values().iterator(); + } else { + // Slice + return map.subMap(from, to).values().iterator(); + } + } + + EntryWithTimestamp get(final MemorySegment key) { + return map.get(key); + } + + EntryWithTimestamp upsert(final EntryWithTimestamp entry) { + return map.put(entry.key(), entry); + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MemorySegmentComparator.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MemorySegmentComparator.java new file mode 100644 index 000000000..a97c0dd0a --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MemorySegmentComparator.java @@ -0,0 +1,89 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.util.Comparator; + +/** + * Compares {@link MemorySegment}s. + * + * @author incubos + */ +final class MemorySegmentComparator implements Comparator { + static final Comparator INSTANCE = + new MemorySegmentComparator(); + + private MemorySegmentComparator() { + // Singleton + } + + @Override + public int compare( + final MemorySegment left, + final MemorySegment right) { + final long mismatch = left.mismatch(right); + if (mismatch == -1L) { + // No mismatch + return 0; + } + + if (mismatch == left.byteSize()) { + // left is prefix of right, so left is smaller + return -1; + } + + if (mismatch == right.byteSize()) { + // right is prefix of left, so left is greater + return 1; + } + + // Compare mismatched bytes as unsigned + return Byte.compareUnsigned( + left.getAtIndex( + ValueLayout.OfByte.JAVA_BYTE, + mismatch), + right.getAtIndex( + ValueLayout.OfByte.JAVA_BYTE, + mismatch)); + } + + static int compare( + final MemorySegment srcSegment, + final long srcFromOffset, + final long srcLength, + final MemorySegment dstSegment, + final long dstFromOffset, + final long dstLength) { + final long mismatch = + MemorySegment.mismatch( + srcSegment, + srcFromOffset, + srcFromOffset + srcLength, + dstSegment, + dstFromOffset, + dstFromOffset + dstLength); + if (mismatch == -1L) { + // No mismatch + return 0; + } + + if (mismatch == srcLength) { + // left is prefix of right, so left is smaller + return -1; + } + + if (mismatch == dstLength) { + // right is prefix of left, so left is greater + return 1; + } + + // Compare mismatched bytes as unsigned + return Byte.compareUnsigned( + srcSegment.getAtIndex( + ValueLayout.OfByte.JAVA_BYTE, + srcFromOffset + mismatch), + dstSegment.getAtIndex( + ValueLayout.OfByte.JAVA_BYTE, + dstFromOffset + mismatch)); + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MergingEntryIterator.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MergingEntryIterator.java new file mode 100644 index 000000000..1040a22fa --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/MergingEntryIterator.java @@ -0,0 +1,70 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import java.lang.foreign.MemorySegment; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.PriorityQueue; +import java.util.Queue; + +/** + * Merges entry {@link Iterator}s. + * + * @author incubos + */ +final class MergingEntryIterator implements Iterator> { + private final Queue iterators; + + MergingEntryIterator(final List iterators) { + assert iterators.stream().allMatch(WeightedPeekingEntryIterator::hasNext); + + this.iterators = new PriorityQueue<>(iterators); + } + + @Override + public boolean hasNext() { + return !iterators.isEmpty(); + } + + @Override + public EntryWithTimestamp next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + final WeightedPeekingEntryIterator top = iterators.remove(); + final EntryWithTimestamp result = top.next(); + + if (top.hasNext()) { + // Not exhausted + iterators.add(top); + } + + // Remove older versions of the key + while (true) { + final WeightedPeekingEntryIterator iterator = iterators.peek(); + if (iterator == null) { + // Nothing left + break; + } + + // Skip entries with the same key + final EntryWithTimestamp entry = iterator.peek(); + if (MemorySegmentComparator.INSTANCE.compare(result.key(), entry.key()) != 0) { + // Reached another key + break; + } + + // Drop + iterators.remove(); + // Skip + iterator.next(); + if (iterator.hasNext()) { + // Not exhausted + iterators.add(iterator); + } + } + + return result; + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/ReferenceDao.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/ReferenceDao.java new file mode 100644 index 000000000..b40d28e85 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/ReferenceDao.java @@ -0,0 +1,288 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import ru.vk.itmo.dao.Config; + +import java.io.IOException; +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +/** + * Reference implementation of {@link Dao}. + * + * @author incubos + */ +public class ReferenceDao implements Dao> { + private final Config config; + private final Arena arena; + + private final ReadWriteLock lock = new ReentrantReadWriteLock(); + // Guarded by lock + private volatile TableSet tableSet; + + private final ExecutorService flusher = + Executors.newSingleThreadExecutor(r -> { + final Thread result = new Thread(r); + result.setName("flusher"); + return result; + }); + private final ExecutorService compactor = + Executors.newSingleThreadExecutor(r -> { + final Thread result = new Thread(r); + result.setName("compactor"); + return result; + }); + + private final AtomicBoolean closed = new AtomicBoolean(); + + public ReferenceDao(final Config config) throws IOException { + this.config = config; + this.arena = Arena.ofShared(); + + // First complete promotion of compacted SSTables + SSTables.promote( + config.basePath(), + 0, + 1); + + this.tableSet = + TableSet.from( + SSTables.discover( + arena, + config.basePath())); + } + + @Override + public Iterator> get( + final MemorySegment from, + final MemorySegment to) { + return tableSet.get( + from, + to); + } + + @Override + public EntryWithTimestamp get(final MemorySegment key) { + // Without lock, just snapshot of table set + return tableSet.get(key); + } + + @Override + public void upsert(final EntryWithTimestamp entry) { + final boolean autoFlush; + lock.readLock().lock(); + try { + if (tableSet.memTableSize.get() > config.flushThresholdBytes() + && tableSet.flushingTable != null) { + throw new IllegalStateException("Can't keep up with flushing!"); + } + + // Upsert + final EntryWithTimestamp previous = tableSet.upsert(entry); + + // Update size estimate + final long size = tableSet.memTableSize.addAndGet(sizeOf(entry) - sizeOf(previous)); + autoFlush = size > config.flushThresholdBytes(); + } finally { + lock.readLock().unlock(); + } + + if (autoFlush) { + initiateFlush(true); + } + } + + private static long sizeOf(final EntryWithTimestamp entry) { + if (entry == null) { + return 0L; + } + + if (entry.value() == null) { + return entry.key().byteSize(); + } + + return entry.key().byteSize() + entry.value().byteSize(); + } + + private void initiateFlush(final boolean auto) { + flusher.submit(() -> { + final TableSet currentTableSet; + lock.writeLock().lock(); + try { + if (this.tableSet.memTable.isEmpty()) { + // Nothing to flush + return; + } + + if (auto && this.tableSet.memTableSize.get() < config.flushThresholdBytes()) { + // Not enough data to flush + return; + } + + // Switch memTable to flushing + currentTableSet = this.tableSet.flushing(); + this.tableSet = currentTableSet; + } finally { + lock.writeLock().unlock(); + } + + // Write + final int sequence = currentTableSet.nextSequence(); + try { + new SSTableWriter() + .write( + config.basePath(), + sequence, + currentTableSet.flushingTable.get(null, null)); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-1); + return; + } + + // Open + final SSTable flushed; + try { + flushed = SSTables.open( + arena, + config.basePath(), + sequence); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-2); + return; + } + + // Switch + lock.writeLock().lock(); + try { + this.tableSet = this.tableSet.flushed(flushed); + } finally { + lock.writeLock().unlock(); + } + }).state(); + } + + @Override + public void flush() throws IOException { + initiateFlush(false); + } + + @Override + public void compact() throws IOException { + compactor.submit(() -> { + final TableSet currentTableSet; + lock.writeLock().lock(); + try { + currentTableSet = this.tableSet; + if (currentTableSet.ssTables.size() < 2) { + // Nothing to compact + return; + } + } finally { + lock.writeLock().unlock(); + } + + // Compact to 0 + try { + new SSTableWriter() + .write( + config.basePath(), + 0, + currentTableSet.allSSTableEntries()); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-3); + } + + // Open 0 + final SSTable compacted; + try { + compacted = + SSTables.open( + arena, + config.basePath(), + 0); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-4); + return; + } + + // Replace old SSTables with compacted one to + // keep serving requests + final Set replaced = new HashSet<>(currentTableSet.ssTables); + lock.writeLock().lock(); + try { + this.tableSet = + this.tableSet.compacted( + replaced, + compacted); + } finally { + lock.writeLock().unlock(); + } + + // Remove compacted SSTables starting from the oldest ones. + // If we crash, 0 contains all the data, and + // it will be promoted on reopen. + for (final SSTable ssTable : currentTableSet.ssTables.reversed()) { + try { + SSTables.remove( + config.basePath(), + ssTable.sequence); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-5); + } + } + + // Promote zero to one (possibly replacing) + try { + SSTables.promote( + config.basePath(), + 0, + 1); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-6); + } + + // Replace promoted SSTable + lock.writeLock().lock(); + try { + this.tableSet = + this.tableSet.compacted( + Collections.singleton(compacted), + compacted.withSequence(1)); + } finally { + lock.writeLock().unlock(); + } + }).state(); + } + + @Override + public void close() throws IOException { + if (closed.getAndSet(true)) { + // Already closed + return; + } + + // Maybe flush + flush(); + + // Stop all the threads + flusher.close(); + compactor.close(); + + // Close arena + arena.close(); + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTable.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTable.java new file mode 100644 index 000000000..cf02b8767 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTable.java @@ -0,0 +1,207 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.util.Collections; +import java.util.Iterator; +import java.util.NoSuchElementException; + +/** + * Persistent SSTable in data file and index file. + * + * @author incubos + * @see SSTables + */ +final class SSTable { + final int sequence; + + private final MemorySegment index; + private final MemorySegment data; + private final long size; + + SSTable( + final int sequence, + final MemorySegment index, + final MemorySegment data) { + this.sequence = sequence; + this.index = index; + this.data = data; + this.size = index.byteSize() / Long.BYTES; + } + + SSTable withSequence(final int sequence) { + return new SSTable( + sequence, + index, + data); + } + + /** + * Returns index of the entry if found; otherwise, (-(insertion point) - 1). + * The insertion point is defined as the point at which the key would be inserted: + * the index of the first element greater than the key, + * or size if all keys are less than the specified key. + * Note that this guarantees that the return value will be >= 0 + * if and only if the key is found. + */ + private long entryBinarySearch(final MemorySegment key) { + long low = 0L; + long high = size - 1; + + while (low <= high) { + final long mid = (low + high) >>> 1; + final long midEntryOffset = entryOffset(mid); + final long midKeyLength = getLength(midEntryOffset); + final int compare = + MemorySegmentComparator.compare( + data, + midEntryOffset + Long.BYTES, // Position at key + midKeyLength, + key, + 0L, + key.byteSize()); + + if (compare < 0) { + low = mid + 1; + } else if (compare > 0) { + high = mid - 1; + } else { + return mid; + } + } + + return -(low + 1); + } + + private long entryOffset(final long entry) { + return index.get( + ValueLayout.OfLong.JAVA_LONG, + entry * Long.BYTES); + } + + private long getLength(final long offset) { + return data.get( + ValueLayout.OfLong.JAVA_LONG_UNALIGNED, + offset); + } + + Iterator> get( + final MemorySegment from, + final MemorySegment to) { + assert from == null || to == null || MemorySegmentComparator.INSTANCE.compare(from, to) <= 0; + + // Slice of SSTable in absolute offsets + final long fromOffset; + final long toOffset; + + // Left offset bound + if (from == null) { + // Start from the beginning + fromOffset = 0L; + } else { + final long fromEntry = entryBinarySearch(from); + if (fromEntry >= 0L) { + fromOffset = entryOffset(fromEntry); + } else if (-fromEntry - 1 == size) { + // No relevant data + return Collections.emptyIterator(); + } else { + // Greater but existing key found + fromOffset = entryOffset(-fromEntry - 1); + } + } + + // Right offset bound + if (to == null) { + // Up to the end + toOffset = data.byteSize(); + } else { + final long toEntry = entryBinarySearch(to); + if (toEntry >= 0L) { + toOffset = entryOffset(toEntry); + } else if (-toEntry - 1 == size) { + // Up to the end + toOffset = data.byteSize(); + } else { + // Greater but existing key found + toOffset = entryOffset(-toEntry - 1); + } + } + + return new SliceIterator(fromOffset, toOffset); + } + + EntryWithTimestamp get(final MemorySegment key) { + final long entry = entryBinarySearch(key); + if (entry < 0) { + return null; + } + + // Skip key (will reuse the argument) + long offset = entryOffset(entry); + offset += Long.BYTES + key.byteSize(); + // Extract value length + final long valueLength = getLength(offset); + if (valueLength == SSTables.TOMBSTONE_VALUE_LENGTH) { + // Tombstone encountered + offset += Long.BYTES; + return new BaseEntryWithTimestamp<>(key, null, getLength(offset)); + } else { + // Get value + offset += Long.BYTES; + final MemorySegment value = data.asSlice(offset, valueLength); + offset += valueLength; + return new BaseEntryWithTimestamp<>(key, value, getLength(offset)); + } + } + + private final class SliceIterator implements Iterator> { + private long offset; + private final long toOffset; + + private SliceIterator( + final long offset, + final long toOffset) { + this.offset = offset; + this.toOffset = toOffset; + } + + @Override + public boolean hasNext() { + return offset < toOffset; + } + + @Override + public EntryWithTimestamp next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + // Read key length + final long keyLength = getLength(offset); + offset += Long.BYTES; + + // Read key + final MemorySegment key = data.asSlice(offset, keyLength); + offset += keyLength; + + // Read value length + final long valueLength = getLength(offset); + offset += Long.BYTES; + + // Read value + if (valueLength == SSTables.TOMBSTONE_VALUE_LENGTH) { + // Tombstone encountered + final long timestamp = getLength(offset); + offset += Long.BYTES; + return new BaseEntryWithTimestamp<>(key, null, timestamp); + } else { + final MemorySegment value = data.asSlice(offset, valueLength); + offset += valueLength; + final long timestamp = getLength(offset); + offset += Long.BYTES; + return new BaseEntryWithTimestamp<>(key, value, timestamp); + } + } + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTableWriter.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTableWriter.java new file mode 100644 index 000000000..566562409 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTableWriter.java @@ -0,0 +1,170 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import java.io.BufferedOutputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.channels.FileChannel; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Iterator; + +/** + * Writes {@link EntryWithTimestamp} {@link Iterator} to SSTable on disk. + * + *

Index file {@code .index} contains {@code long} offsets to entries in data file: + * {@code [offset0, offset1, ...]} + * + *

Data file {@code .data} contains serialized entries: + * {@code } + * + *

Tombstones are encoded as {@code valueLength} {@code -1} and no subsequent value. + * + * @author incubos + */ +final class SSTableWriter { + private static final int BUFFER_SIZE = 64 * 1024; + + // Reusable buffers to eliminate allocations. + // But excessive memory copying is still there :( + // Long cell + private final ByteArraySegment longBuffer = new ByteArraySegment(Long.BYTES); + // Growable blob cell + private final ByteArraySegment blobBuffer = new ByteArraySegment(512); + + void write( + final Path baseDir, + final int sequence, + final Iterator> entries) throws IOException { + // Write to temporary files + final Path tempIndexName = SSTables.tempIndexName(baseDir, sequence); + final Path tempDataName = SSTables.tempDataName(baseDir, sequence); + + // Delete temporary files to eliminate tails + Files.deleteIfExists(tempIndexName); + Files.deleteIfExists(tempDataName); + + // Iterate in a single pass! + // Will write through FileChannel despite extra memory copying and + // no buffering (which may be implemented later). + // Looking forward to MemorySegment facilities in FileChannel! + try (OutputStream index = + new BufferedOutputStream( + new FileOutputStream( + tempIndexName.toFile()), + BUFFER_SIZE); + OutputStream data = + new BufferedOutputStream( + new FileOutputStream( + tempDataName.toFile()), + BUFFER_SIZE)) { + long entryOffset = 0L; + + // Iterate and serialize + while (entries.hasNext()) { + // First write offset to the entry + writeLong(entryOffset, index); + + // Then write the entry + final EntryWithTimestamp entry = entries.next(); + entryOffset += writeEntry(entry, data); + } + } + + // Publish files atomically + // FIRST index, LAST data + final Path indexName = + SSTables.indexName( + baseDir, + sequence); + Files.move( + tempIndexName, + indexName, + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING); + final Path dataName = + SSTables.dataName( + baseDir, + sequence); + Files.move( + tempDataName, + dataName, + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING); + } + + private void writeLong( + final long value, + final OutputStream os) throws IOException { + longBuffer.segment().set( + ValueLayout.OfLong.JAVA_LONG_UNALIGNED, + 0, + value); + longBuffer.withArray(os::write); + } + + private void writeSegment( + final MemorySegment value, + final OutputStream os) throws IOException { + final long size = value.byteSize(); + blobBuffer.ensureCapacity(size); + MemorySegment.copy( + value, + 0L, + blobBuffer.segment(), + 0L, + size); + blobBuffer.withArray(array -> + os.write( + array, + 0, + (int) size)); + } + + /** + * Writes {@link EntryWithTimestamp} to {@link FileChannel}. + * + * @return written bytes + */ + private long writeEntry( + final EntryWithTimestamp entry, + final OutputStream os) throws IOException { + final MemorySegment key = entry.key(); + final MemorySegment value = entry.value(); + final long timestamp = entry.timestamp(); + long result = 0L; + + // Key size + writeLong(key.byteSize(), os); + result += Long.BYTES; + + // Key + writeSegment(key, os); + result += key.byteSize(); + + // Value size and possibly value + if (value == null) { + // Tombstone + writeLong(SSTables.TOMBSTONE_VALUE_LENGTH, os); + result += Long.BYTES; + + } else { + // Value length + writeLong(value.byteSize(), os); + result += Long.BYTES; + + // Value + writeSegment(value, os); + result += value.byteSize(); + } + + // Timestamp + writeLong(timestamp, os); + result += Long.BYTES; + + return result; + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTables.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTables.java new file mode 100644 index 000000000..d11c9dcca --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/SSTables.java @@ -0,0 +1,162 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.nio.channels.FileChannel; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.nio.file.StandardOpenOption; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Stream; + +/** + * Provides {@link SSTable} management facilities: dumping and discovery. + * + * @author incubos + */ +final class SSTables { + public static final String INDEX_SUFFIX = ".index"; + public static final String DATA_SUFFIX = ".data"; + public static final long TOMBSTONE_VALUE_LENGTH = -1L; + + private static final String TEMP_SUFFIX = ".tmp"; + + /** + * Can't instantiate. + */ + private SSTables() { + // Only static methods + } + + static Path indexName( + final Path baseDir, + final int sequence) { + return baseDir.resolve(sequence + INDEX_SUFFIX); + } + + static Path dataName( + final Path baseDir, + final int sequence) { + return baseDir.resolve(sequence + DATA_SUFFIX); + } + + static Path tempIndexName( + final Path baseDir, + final int sequence) { + return baseDir.resolve(sequence + INDEX_SUFFIX + TEMP_SUFFIX); + } + + static Path tempDataName( + final Path baseDir, + final int sequence) { + return baseDir.resolve(sequence + DATA_SUFFIX + TEMP_SUFFIX); + } + + /** + * Returns {@link List} of {@link SSTable}s from freshest to oldest. + */ + static List discover( + final Arena arena, + final Path baseDir) throws IOException { + if (!Files.exists(baseDir)) { + return Collections.emptyList(); + } + + final List result = new ArrayList<>(); + try (Stream files = Files.list(baseDir)) { + files.forEach(file -> { + final String fileName = file.getFileName().toString(); + if (!fileName.endsWith(DATA_SUFFIX)) { + // Skip non data + return; + } + + final int sequence = + // .data -> N + Integer.parseInt( + fileName.substring( + 0, + fileName.length() - DATA_SUFFIX.length())); + + try { + result.add(open(arena, baseDir, sequence)); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); + } + + // Sort from freshest to oldest + result.sort((o1, o2) -> Integer.compare(o2.sequence, o1.sequence)); + + return Collections.unmodifiableList(result); + } + + static SSTable open( + final Arena arena, + final Path baseDir, + final int sequence) throws IOException { + final MemorySegment index = + mapReadOnly( + arena, + indexName(baseDir, sequence)); + final MemorySegment data = + mapReadOnly( + arena, + dataName(baseDir, sequence)); + + return new SSTable( + sequence, + index, + data); + } + + private static MemorySegment mapReadOnly( + final Arena arena, + final Path file) throws IOException { + try (FileChannel channel = + FileChannel.open( + file, + StandardOpenOption.READ)) { + return channel.map( + FileChannel.MapMode.READ_ONLY, + 0L, + Files.size(file), + arena); + } + } + + static void remove( + final Path baseDir, + final int sequence) throws IOException { + // First delete data file to make SSTable invisible + Files.delete(dataName(baseDir, sequence)); + Files.delete(indexName(baseDir, sequence)); + } + + static void promote( + final Path baseDir, + final int from, + final int to) throws IOException { + // Build to progress to the same outcome + if (Files.exists(indexName(baseDir, from))) { + Files.move( + indexName(baseDir, from), + indexName(baseDir, to), + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING); + } + if (Files.exists(dataName(baseDir, from))) { + Files.move( + dataName(baseDir, from), + dataName(baseDir, to), + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING); + } + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/TableSet.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/TableSet.java new file mode 100644 index 000000000..238caec00 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/TableSet.java @@ -0,0 +1,203 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import java.lang.foreign.MemorySegment; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Data set in various tables. + * + * @author incubos + */ +final class TableSet { + final MemTable memTable; + final AtomicLong memTableSize; + // null or read-only + final MemTable flushingTable; + // From freshest to oldest + final List ssTables; + + private TableSet( + final MemTable memTable, + final AtomicLong memTableSize, + final MemTable flushingTable, + final List ssTables) { + this.memTable = memTable; + this.memTableSize = memTableSize; + this.flushingTable = flushingTable; + this.ssTables = ssTables; + } + + static TableSet from(final List ssTables) { + return new TableSet( + new MemTable(), + new AtomicLong(), + null, + ssTables); + } + + int nextSequence() { + return ssTables.stream() + .mapToInt(t -> t.sequence) + .max() + .orElse(0) + 1; + } + + TableSet flushing() { + if (memTable.isEmpty()) { + throw new IllegalStateException("Nothing to flush"); + } + + if (flushingTable != null) { + throw new IllegalStateException("Already flushing"); + } + + return new TableSet( + new MemTable(), + new AtomicLong(), + memTable, + ssTables); + } + + TableSet flushed(final SSTable flushed) { + final List newSSTables = new ArrayList<>(ssTables.size() + 1); + newSSTables.add(flushed); + newSSTables.addAll(ssTables); + return new TableSet( + memTable, + memTableSize, + null, + newSSTables); + } + + TableSet compacted( + final Set replaced, + final SSTable with) { + final List newSsTables = new ArrayList<>(this.ssTables.size() + 1); + + // Keep not replaced SSTables + for (final SSTable ssTable : this.ssTables) { + if (!replaced.contains(ssTable)) { + newSsTables.add(ssTable); + } + } + + // Logically the oldest one + newSsTables.add(with); + + return new TableSet( + memTable, + memTableSize, + flushingTable, + newSsTables); + } + + Iterator> get( + final MemorySegment from, + final MemorySegment to) { + final List iterators = + new ArrayList<>(2 + ssTables.size()); + + // MemTable goes first + final Iterator> memTableIterator = + memTable.get(from, to); + if (memTableIterator.hasNext()) { + iterators.add( + new WeightedPeekingEntryIterator( + Integer.MIN_VALUE, + memTableIterator)); + } + + // Then goes flushing + if (flushingTable != null) { + final Iterator> flushingIterator = + flushingTable.get(from, to); + if (flushingIterator.hasNext()) { + iterators.add( + new WeightedPeekingEntryIterator( + Integer.MIN_VALUE + 1, + flushingIterator)); + } + } + + // Then go all the SSTables + for (int i = 0; i < ssTables.size(); i++) { + final SSTable ssTable = ssTables.get(i); + final Iterator> ssTableIterator = + ssTable.get(from, to); + if (ssTableIterator.hasNext()) { + iterators.add( + new WeightedPeekingEntryIterator( + i, + ssTableIterator)); + } + } + + return switch (iterators.size()) { + case 0 -> Collections.emptyIterator(); + case 1 -> iterators.get(0); + default -> new MergingEntryIterator(iterators); + }; + } + + EntryWithTimestamp get(final MemorySegment key) { + // Slightly optimized version not to pollute the heap + + // First check MemTable + EntryWithTimestamp result = memTable.get(key); + if (result != null) { + // Transform tombstone + return result; + } + + // Then check flushing + if (flushingTable != null) { + result = flushingTable.get(key); + if (result != null) { + // Transform tombstone + return result; + } + } + + // At last check SSTables from freshest to oldest + for (final SSTable ssTable : ssTables) { + result = ssTable.get(key); + if (result != null) { + // Transform tombstone + return result; + } + } + + // Nothing found + return null; + } + +// private static EntryWithTimestamp swallowTombstone(final EntryWithTimestamp entry) { +// return entry.value() == null ? null : entry; +// } + + EntryWithTimestamp upsert(final EntryWithTimestamp entry) { + return memTable.upsert(entry); + } + + Iterator> allSSTableEntries() { + final List iterators = + new ArrayList<>(ssTables.size()); + + for (int i = 0; i < ssTables.size(); i++) { + final SSTable ssTable = ssTables.get(i); + final Iterator> ssTableIterator = + ssTable.get(null, null); + iterators.add( + new WeightedPeekingEntryIterator( + i, + ssTableIterator)); + } + + return new MergingEntryIterator(iterators); + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/WeightedPeekingEntryIterator.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/WeightedPeekingEntryIterator.java new file mode 100644 index 000000000..cb8cc4dc6 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/WeightedPeekingEntryIterator.java @@ -0,0 +1,65 @@ +package ru.vk.itmo.test.tuzikovalexandr.dao; + +import java.lang.foreign.MemorySegment; +import java.util.Iterator; +import java.util.NoSuchElementException; + +/** + * Peeking {@link Iterator} wrapper. + * + * @author incubos + */ +final class WeightedPeekingEntryIterator + implements Iterator>, + Comparable { + private final int weight; + private final Iterator> delegate; + private EntryWithTimestamp next; + + WeightedPeekingEntryIterator( + final int weight, + final Iterator> delegate) { + this.weight = weight; + this.delegate = delegate; + this.next = delegate.hasNext() ? delegate.next() : null; + } + + @Override + public boolean hasNext() { + return next != null; + } + + @Override + public EntryWithTimestamp next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + final EntryWithTimestamp result = next; + next = delegate.hasNext() ? delegate.next() : null; + return result; + } + + EntryWithTimestamp peek() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + return next; + } + + @Override + public int compareTo(final WeightedPeekingEntryIterator other) { + // First compare keys + int result = + MemorySegmentComparator.INSTANCE.compare( + peek().key(), + other.peek().key()); + if (result != 0) { + return result; + } + + // Then compare weights if keys are equal + return Integer.compare(weight, other.weight); + } +} From 153bb7faed285ac2cc9e07e21989663514a5a1e6 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 27 Mar 2024 15:32:47 +0300 Subject: [PATCH 32/60] Add request handler --- .../itmo/test/tuzikovalexandr/Constants.java | 29 ++++ .../test/tuzikovalexandr/RequestHandler.java | 87 +++++++++++ .../vk/itmo/test/tuzikovalexandr/Server.java | 13 +- .../itmo/test/tuzikovalexandr/ServerImpl.java | 136 ++++++++---------- .../test/tuzikovalexandr/ServiceImpl.java | 6 +- 5 files changed, 184 insertions(+), 87 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java new file mode 100644 index 000000000..e2d1d41a1 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java @@ -0,0 +1,29 @@ +package ru.vk.itmo.test.tuzikovalexandr; + +import one.nio.http.Request; +import one.nio.http.Response; + +import java.net.HttpURLConnection; +import java.util.Map; +import java.util.Set; + +public final class Constants { + public static final Set METHODS = Set.of( + Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE + ); + public static final String TOO_MANY_REQUESTS = "429 Too Many Requests"; + public static final int REQUEST_TIMEOUT = 300; + public static final Map HTTP_CODE = Map.of( + HttpURLConnection.HTTP_OK, Response.OK, + HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, + HttpURLConnection.HTTP_CREATED, Response.CREATED, + HttpURLConnection.HTTP_NOT_FOUND, Response.NOT_FOUND, + HttpURLConnection.HTTP_BAD_REQUEST, Response.BAD_REQUEST, + HttpURLConnection.HTTP_INTERNAL_ERROR, Response.INTERNAL_ERROR + ); + public static final String BASE_URL = "http://localhost"; + public static final int BASE_PORT = 8080; + public static final long FLUSHING_THRESHOLD_BYTES = 1024 * 1024; + public static final int NUMBER_OF_VIRTUAL_NODES = 5; + public static final String HTTP_TIMESTAMP_HEADER = "X-Timestamp"; +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java new file mode 100644 index 000000000..1a6a69703 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java @@ -0,0 +1,87 @@ +package ru.vk.itmo.test.tuzikovalexandr; + +import one.nio.http.*; +import ru.vk.itmo.test.tuzikovalexandr.dao.BaseEntryWithTimestamp; +import ru.vk.itmo.test.tuzikovalexandr.dao.Dao; +import ru.vk.itmo.test.tuzikovalexandr.dao.EntryWithTimestamp; + +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.charset.StandardCharsets; + +import static ru.vk.itmo.test.tuzikovalexandr.Constants.HTTP_TIMESTAMP_HEADER; + +public class RequestHandler { + private final Dao dao; + + public RequestHandler(Dao dao) { + this.dao = dao; + } + + public Response handle(Request request, String id) { + return switch (request.getMethod()) { + case Request.METHOD_GET -> getEntry(id); + case Request.METHOD_PUT -> putEntry(id, request); + case Request.METHOD_DELETE -> deleteEntry(id); + default -> new Response(Response.BAD_REQUEST, Response.EMPTY); + }; + } + + private Response getEntry(@Param(value = "id", required = true) String id) { + if (id.isEmpty() || id.isBlank()) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + MemorySegment key = fromString(id); + EntryWithTimestamp entry = dao.get(key); + + if (entry == null || entry.value() == null) { + long timestamp = entry != null ? entry.timestamp() : 0; + return sendResponseWithTimestamp( + Response.NOT_FOUND, + Response.EMPTY, + timestamp + ); + } + + return sendResponseWithTimestamp( + Response.OK, + entry.value().toArray(ValueLayout.JAVA_BYTE), + entry.timestamp() + ); + } + + private Response putEntry(@Param(value = "id", required = true) String id, Request request) { + if (id.isEmpty() || id.isBlank() || request.getBody() == null) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + MemorySegment key = fromString(id); + MemorySegment value = MemorySegment.ofArray(request.getBody()); + + dao.upsert(new BaseEntryWithTimestamp(key, value, System.currentTimeMillis())); + + return new Response(Response.CREATED, Response.EMPTY); + } + + private Response deleteEntry(@Param(value = "id", required = true) String id) { + if (id.isEmpty() || id.isBlank()) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + MemorySegment key = fromString(id); + dao.upsert(new BaseEntryWithTimestamp<>(key, null, System.currentTimeMillis())); + + return new Response(Response.ACCEPTED, Response.EMPTY); + } + + private Response sendResponseWithTimestamp(String resultCode, byte[] body, long timestamp) { + Response response = new Response(resultCode, body); + response.addHeader(HTTP_TIMESTAMP_HEADER + timestamp); + return response; + } + + private MemorySegment fromString(String data) { + return data == null ? null : MemorySegment.ofArray(data.getBytes(StandardCharsets.UTF_8)); + } +} diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index 633a7dcfd..3d6df4038 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -11,9 +11,13 @@ import java.util.ArrayList; import java.util.List; +import static ru.vk.itmo.test.tuzikovalexandr.Constants.BASE_PORT; +import static ru.vk.itmo.test.tuzikovalexandr.Constants.BASE_URL; +import static ru.vk.itmo.test.tuzikovalexandr.Constants.FLUSHING_THRESHOLD_BYTES; +import static ru.vk.itmo.test.tuzikovalexandr.Constants.NUMBER_OF_VIRTUAL_NODES; + + public final class Server { - private static String BASE_URL = "http://localhost"; - private static int BASE_PORT = 8080; private Server() { @@ -21,7 +25,6 @@ private Server() { public static void main(String[] args) throws IOException { int clusterSize = 3; - long flushThresholdBytes = 1024 * 1024; List clusterUrls = new ArrayList<>(); int tempPortValue; @@ -35,12 +38,12 @@ public static void main(String[] args) throws IOException { for (int i = 0; i < clusterSize; i++) { Path dataPath = Files.createTempDirectory("data"); - Dao dao = new ReferenceDao(new Config(dataPath, flushThresholdBytes)); + Dao dao = new ReferenceDao(new Config(dataPath, FLUSHING_THRESHOLD_BYTES)); ServiceConfig serviceConfig = new ServiceConfig(BASE_PORT + i, clusterUrls.get(i), clusterUrls, dataPath); - ConsistentHashing consistentHashing = new ConsistentHashing(clusterUrls, 5); + ConsistentHashing consistentHashing = new ConsistentHashing(clusterUrls, NUMBER_OF_VIRTUAL_NODES); ServerImpl server = new ServerImpl(serviceConfig, dao, worker, consistentHashing); diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index e08b02a23..a93c1d83c 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -4,31 +4,20 @@ import one.nio.http.HttpServer; import one.nio.http.HttpServerConfig; import one.nio.http.HttpSession; -import one.nio.http.Param; -import one.nio.http.Path; import one.nio.http.Request; -import one.nio.http.RequestMethod; import one.nio.http.Response; import one.nio.server.AcceptorConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.vk.itmo.ServiceConfig; -import ru.vk.itmo.test.tuzikovalexandr.dao.BaseEntryWithTimestamp; import ru.vk.itmo.test.tuzikovalexandr.dao.Dao; -import ru.vk.itmo.test.tuzikovalexandr.dao.EntryWithTimestamp; import java.io.IOException; -import java.lang.foreign.MemorySegment; -import java.lang.foreign.ValueLayout; -import java.net.HttpURLConnection; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; -import java.nio.charset.StandardCharsets; -import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -36,36 +25,25 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import static ru.vk.itmo.test.tuzikovalexandr.Constants.*; + public class ServerImpl extends HttpServer { - private final Dao dao; private final ExecutorService executorService; private final HttpClient httpClient; private final ConsistentHashing consistentHashing; + private final RequestHandler requestHandler; private static final Logger log = LoggerFactory.getLogger(ServerImpl.class); private final String selfUrl; - private static final Set METHODS = Set.of( - Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE - ); - public static final String TOO_MANY_REQUESTS = "429 Too Many Requests"; - public static final int REQUEST_TIMEOUT = 300; - private static final Map HTTP_CODE = Map.of( - HttpURLConnection.HTTP_OK, Response.OK, - HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, - HttpURLConnection.HTTP_CREATED, Response.CREATED, - HttpURLConnection.HTTP_NOT_FOUND, Response.NOT_FOUND, - HttpURLConnection.HTTP_BAD_REQUEST, Response.BAD_REQUEST, - HttpURLConnection.HTTP_INTERNAL_ERROR, Response.INTERNAL_ERROR - ); public ServerImpl(ServiceConfig config, Dao dao, Worker worker, ConsistentHashing consistentHashing) throws IOException { super(createServerConfig(config)); - this.dao = dao; this.executorService = worker.getExecutorService(); this.consistentHashing = consistentHashing; this.selfUrl = config.selfUrl(); + this.requestHandler = new RequestHandler(dao); this.httpClient = HttpClient.newBuilder() .executor(Executors.newFixedThreadPool(2)).build(); } @@ -95,6 +73,10 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti @Override public void handleRequest(Request request, HttpSession session) throws IOException { try { + if (!METHODS.contains(request.getMethod())) { + session.sendResponse(new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY)); + } + long processingStartTime = System.currentTimeMillis(); executorService.execute(() -> { try { @@ -109,58 +91,53 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti } } - @Path(value = "/v0/status") - public Response status() { - return Response.ok("OK"); - } - - @Path(value = "/v0/entity") - @RequestMethod(Request.METHOD_GET) - public Response getEntry(@Param(value = "id", required = true) String id) { - if (id.isEmpty() || id.isBlank()) { - return new Response(Response.BAD_REQUEST, Response.EMPTY); - } - - MemorySegment key = fromString(id); - EntryWithTimestamp entry = dao.get(key); - - if (entry == null || entry.value() == null) { - return new Response(Response.NOT_FOUND, Response.EMPTY); - } - - return new Response(Response.OK, entry.value().toArray(ValueLayout.JAVA_BYTE)); - } - - @Path(value = "/v0/entity") - @RequestMethod(Request.METHOD_PUT) - public Response putEntry(@Param(value = "id", required = true) String id, Request request) { - if (id.isEmpty() || id.isBlank() || request.getBody() == null) { - return new Response(Response.BAD_REQUEST, Response.EMPTY); - } - - MemorySegment key = fromString(id); - MemorySegment value = MemorySegment.ofArray(request.getBody()); - - dao.upsert(new BaseEntryWithTimestamp(key, value, System.currentTimeMillis())); - return new Response(Response.CREATED, Response.EMPTY); - } - - @Path(value = "/v0/entity") - @RequestMethod(Request.METHOD_DELETE) - public Response deleteEntry(@Param(value = "id", required = true) String id) { - if (id.isEmpty() || id.isBlank()) { - return new Response(Response.BAD_REQUEST, Response.EMPTY); - } - - MemorySegment key = fromString(id); - dao.upsert(new BaseEntryWithTimestamp<>(key, null, System.currentTimeMillis())); - - return new Response(Response.ACCEPTED, Response.EMPTY); - } - - private MemorySegment fromString(String data) { - return data == null ? null : MemorySegment.ofArray(data.getBytes(StandardCharsets.UTF_8)); - } +// @Path(value = "/v0/entity") +// @RequestMethod(Request.METHOD_GET) +// public Response getEntry(@Param(value = "id", required = true) String id) { +// if (id.isEmpty() || id.isBlank()) { +// return new Response(Response.BAD_REQUEST, Response.EMPTY); +// } +// +// MemorySegment key = fromString(id); +// EntryWithTimestamp entry = dao.get(key); +// +// if (entry == null || entry.value() == null) { +// return new Response(Response.NOT_FOUND, Response.EMPTY); +// } +// +// return new Response(Response.OK, entry.value().toArray(ValueLayout.JAVA_BYTE)); +// } +// +// @Path(value = "/v0/entity") +// @RequestMethod(Request.METHOD_PUT) +// public Response putEntry(@Param(value = "id", required = true) String id, Request request) { +// if (id.isEmpty() || id.isBlank() || request.getBody() == null) { +// return new Response(Response.BAD_REQUEST, Response.EMPTY); +// } +// +// MemorySegment key = fromString(id); +// MemorySegment value = MemorySegment.ofArray(request.getBody()); +// +// dao.upsert(new BaseEntryWithTimestamp(key, value, System.currentTimeMillis())); +// return new Response(Response.CREATED, Response.EMPTY); +// } +// +// @Path(value = "/v0/entity") +// @RequestMethod(Request.METHOD_DELETE) +// public Response deleteEntry(@Param(value = "id", required = true) String id) { +// if (id.isEmpty() || id.isBlank()) { +// return new Response(Response.BAD_REQUEST, Response.EMPTY); +// } +// +// MemorySegment key = fromString(id); +// dao.upsert(new BaseEntryWithTimestamp<>(key, null, System.currentTimeMillis())); +// +// return new Response(Response.ACCEPTED, Response.EMPTY); +// } +// +// private MemorySegment fromString(String data) { +// return data == null ? null : MemorySegment.ofArray(data.getBytes(StandardCharsets.UTF_8)); +// } private void processingRequest(Request request, HttpSession session, long processingStartTime) throws IOException { if (System.currentTimeMillis() - processingStartTime > 300) { @@ -178,7 +155,8 @@ private void processingRequest(Request request, HttpSession session, long proces try { String nodeUrl = consistentHashing.getNode(paramId); if (Objects.equals(selfUrl, nodeUrl)) { - super.handleRequest(request, session); +// super.handleRequest(request, session); + session.sendResponse(requestHandler.handle(request, paramId)); } else { handleProxyRequest(request, session, nodeUrl, paramId); } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index 1402b58c0..a30ba2fb3 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -11,10 +11,10 @@ import java.io.IOException; import java.util.concurrent.CompletableFuture; -public class ServiceImpl implements Service { +import static ru.vk.itmo.test.tuzikovalexandr.Constants.FLUSHING_THRESHOLD_BYTES; +import static ru.vk.itmo.test.tuzikovalexandr.Constants.NUMBER_OF_VIRTUAL_NODES; - private static final long FLUSHING_THRESHOLD_BYTES = 1024 * 1024; - private static final int NUMBER_OF_VIRTUAL_NODES = 5; +public class ServiceImpl implements Service { private final ServiceConfig config; private ServerImpl server; From 62277c83309b9ac5a1ded3ed4c295286b024f404 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 28 Mar 2024 13:02:29 +0300 Subject: [PATCH 33/60] Add replication --- .../tuzikovalexandr/ConsistentHashing.java | 16 +- .../itmo/test/tuzikovalexandr/Constants.java | 3 + .../itmo/test/tuzikovalexandr/ServerImpl.java | 181 +++++++++--------- 3 files changed, 107 insertions(+), 93 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index fa522bfa6..377cd3a84 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -33,13 +33,17 @@ public String getNode(String key) { final int hash = getHash(key); SortedMap tailMap = circle.tailMap(hash); return (tailMap.isEmpty() ? circle.firstEntry() : tailMap.firstEntry()).getValue(); + } -// if (!circle.containsKey(hash)) { -// SortedMap tailMap = circle.tailMap(hash); -// hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey(); -// } -// -// return circle.get(hash); + public List getNodes(String key, int from) { + if (circle.isEmpty()) { + return null; + } + + final int hash = getHash(key); + SortedMap tailMap = circle.tailMap(hash); + return (tailMap.isEmpty() ? circle.values() : tailMap.values()) + .stream().limit(from).toList(); } private int getHash(String key) { diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java index e2d1d41a1..26fd25a7d 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java @@ -12,6 +12,7 @@ public final class Constants { Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE ); public static final String TOO_MANY_REQUESTS = "429 Too Many Requests"; + public static final String NOT_ENOUGH_REPLICAS = "504 Not Enough Replicas"; public static final int REQUEST_TIMEOUT = 300; public static final Map HTTP_CODE = Map.of( HttpURLConnection.HTTP_OK, Response.OK, @@ -26,4 +27,6 @@ public final class Constants { public static final long FLUSHING_THRESHOLD_BYTES = 1024 * 1024; public static final int NUMBER_OF_VIRTUAL_NODES = 5; public static final String HTTP_TIMESTAMP_HEADER = "X-Timestamp"; + public static final String NIO_TIMESTAMP_HEADER = "x-timestamp:"; + public static final String HTTP_TERMINATION_HEADER = "X-Termination"; } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index a93c1d83c..b9b284ae3 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -17,7 +17,7 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; -import java.util.Objects; +import java.util.*; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -36,6 +36,7 @@ public class ServerImpl extends HttpServer { private static final Logger log = LoggerFactory.getLogger(ServerImpl.class); private final String selfUrl; + private final int clusterSize; public ServerImpl(ServiceConfig config, Dao dao, Worker worker, ConsistentHashing consistentHashing) throws IOException { @@ -43,6 +44,7 @@ public ServerImpl(ServiceConfig config, Dao dao, Worker worker, this.executorService = worker.getExecutorService(); this.consistentHashing = consistentHashing; this.selfUrl = config.selfUrl(); + this.clusterSize = config.clusterUrls().size(); this.requestHandler = new RequestHandler(dao); this.httpClient = HttpClient.newBuilder() .executor(Executors.newFixedThreadPool(2)).build(); @@ -73,14 +75,33 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti @Override public void handleRequest(Request request, HttpSession session) throws IOException { try { - if (!METHODS.contains(request.getMethod())) { - session.sendResponse(new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY)); + if (!request.getURI().startsWith("/v0/entity?id=") || !METHODS.contains(request.getMethod())) { + handleDefault(request, session); + return; + } + + String paramId = request.getParameter("id="); + + if (paramId == null || paramId.isEmpty()) { + sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); + return; + } + + String fromStr = request.getParameter("from="); + String ackStr = request.getParameter("ack="); + + int from = fromStr == null || fromStr.isEmpty() ? clusterSize : Integer.parseInt(fromStr); + int ack = ackStr == null || ackStr.isEmpty() ? from / 2 + 1 : Integer.parseInt(ackStr); + + if (ack == 0 || from > clusterSize || ack > from) { + sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); + return; } long processingStartTime = System.currentTimeMillis(); executorService.execute(() -> { try { - processingRequest(request, session, processingStartTime); + processingRequest(request, session, processingStartTime, paramId, from, ack); } catch (IOException e) { log.error("Exception while sending close connection", e); session.scheduleClose(); @@ -91,74 +112,18 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti } } -// @Path(value = "/v0/entity") -// @RequestMethod(Request.METHOD_GET) -// public Response getEntry(@Param(value = "id", required = true) String id) { -// if (id.isEmpty() || id.isBlank()) { -// return new Response(Response.BAD_REQUEST, Response.EMPTY); -// } -// -// MemorySegment key = fromString(id); -// EntryWithTimestamp entry = dao.get(key); -// -// if (entry == null || entry.value() == null) { -// return new Response(Response.NOT_FOUND, Response.EMPTY); -// } -// -// return new Response(Response.OK, entry.value().toArray(ValueLayout.JAVA_BYTE)); -// } -// -// @Path(value = "/v0/entity") -// @RequestMethod(Request.METHOD_PUT) -// public Response putEntry(@Param(value = "id", required = true) String id, Request request) { -// if (id.isEmpty() || id.isBlank() || request.getBody() == null) { -// return new Response(Response.BAD_REQUEST, Response.EMPTY); -// } -// -// MemorySegment key = fromString(id); -// MemorySegment value = MemorySegment.ofArray(request.getBody()); -// -// dao.upsert(new BaseEntryWithTimestamp(key, value, System.currentTimeMillis())); -// return new Response(Response.CREATED, Response.EMPTY); -// } -// -// @Path(value = "/v0/entity") -// @RequestMethod(Request.METHOD_DELETE) -// public Response deleteEntry(@Param(value = "id", required = true) String id) { -// if (id.isEmpty() || id.isBlank()) { -// return new Response(Response.BAD_REQUEST, Response.EMPTY); -// } -// -// MemorySegment key = fromString(id); -// dao.upsert(new BaseEntryWithTimestamp<>(key, null, System.currentTimeMillis())); -// -// return new Response(Response.ACCEPTED, Response.EMPTY); -// } -// -// private MemorySegment fromString(String data) { -// return data == null ? null : MemorySegment.ofArray(data.getBytes(StandardCharsets.UTF_8)); -// } - - private void processingRequest(Request request, HttpSession session, long processingStartTime) throws IOException { - if (System.currentTimeMillis() - processingStartTime > 300) { + private void processingRequest(Request request, HttpSession session, long processingStartTime, + String paramId, int from, int ack) throws IOException { + if (System.currentTimeMillis() - processingStartTime > 500) { session.sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); return; } - String paramId = request.getParameter("id="); - - if (paramId == null || paramId.isEmpty()) { - sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); - return; - } - try { - String nodeUrl = consistentHashing.getNode(paramId); - if (Objects.equals(selfUrl, nodeUrl)) { -// super.handleRequest(request, session); - session.sendResponse(requestHandler.handle(request, paramId)); + if (request.getHeader(HTTP_TERMINATION_HEADER) == null) { + session.sendResponse(handleProxyRequest(request, session, paramId, from, ack)); } else { - handleProxyRequest(request, session, nodeUrl, paramId); + session.sendResponse(requestHandler.handle(request, paramId)); } } catch (Exception e) { if (e.getClass() == HttpException.class) { @@ -170,18 +135,14 @@ private void processingRequest(Request request, HttpSession session, long proces } } - private void sendException(HttpSession session, Exception exception) { - try { - String responseCode; - if (exception.getClass().equals(TimeoutException.class)) { - responseCode = Response.REQUEST_TIMEOUT; - } else { - responseCode = Response.INTERNAL_ERROR; - } - session.sendResponse(new Response(responseCode, Response.EMPTY)); - } catch (IOException e) { - log.error("Error sending exception", e); + private Response sendException(Exception exception) { + String responseCode; + if (exception.getClass().equals(TimeoutException.class)) { + responseCode = Response.REQUEST_TIMEOUT; + } else { + responseCode = Response.INTERNAL_ERROR; } + return new Response(responseCode, Response.EMPTY); } private void sendResponse(HttpSession session, Response response) { @@ -198,10 +159,11 @@ private HttpRequest createProxyRequest(Request request, String nodeUrl, String p .method(request.getMethodName(), request.getBody() == null ? HttpRequest.BodyPublishers.noBody() : HttpRequest.BodyPublishers.ofByteArray(request.getBody())) + .setHeader(HTTP_TERMINATION_HEADER, "true") .build(); } - private void sendProxyRequest(HttpSession session, HttpRequest httpRequest) { + private Response sendProxyRequest(HttpRequest httpRequest) { try { HttpResponse httpResponse = httpClient .sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) @@ -209,25 +171,70 @@ private void sendProxyRequest(HttpSession session, HttpRequest httpRequest) { String statusCode = HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); if (statusCode == null) { - sendResponse(session, new Response(Response.INTERNAL_ERROR, httpResponse.body())); + return new Response(Response.INTERNAL_ERROR, httpResponse.body()); } else { - sendResponse(session, new Response(statusCode, httpResponse.body())); + + Response response = new Response(statusCode, httpResponse.body()); + long timestamp = httpRequest.headers().firstValueAsLong(HTTP_TIMESTAMP_HEADER).orElse(0); + response.addHeader(NIO_TIMESTAMP_HEADER + timestamp); + return response; } } catch (InterruptedException e) { Thread.currentThread().interrupt(); - sendException(session, e); + return sendException(e); } catch (ExecutionException | TimeoutException e) { - sendException(session, e); + return sendException(e); + } + } + + private List sendProxyRequests(Map httpRequests, List nodeUrls) { + List responses = new ArrayList<>(); + for (String nodeUrl : nodeUrls) { + HttpRequest httpRequest = httpRequests.get(nodeUrl); + if (!Objects.equals(selfUrl, nodeUrl)) { + responses.add(sendProxyRequest(httpRequest)); + } } + return responses; } - private void handleProxyRequest(Request request, HttpSession session, String nodeUrl, String params) { - HttpRequest httpRequest = createProxyRequest(request, nodeUrl, params); + private Response handleProxyRequest(Request request, HttpSession session, String paramId, int from, int ack) { + List nodeUrls = consistentHashing.getNodes(paramId, from); + + if (nodeUrls.size() < from) { + sendResponse(session, new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY)); + } + + HashMap httpRequests = new HashMap<>(nodeUrls.size()); + for (String nodeUrl : nodeUrls) { + httpRequests.put(nodeUrl, createProxyRequest(request, nodeUrl, paramId)); + } - if (httpRequest == null) { - sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); + List responses = sendProxyRequests(httpRequests, nodeUrls); + + if (httpRequests.get(selfUrl) != null) { + responses.add(requestHandler.handle(request, paramId)); + } + + List successResponses = new ArrayList<>(); + for (Response response : responses) { + if (response.getStatus() < 500) { + successResponses.add(response); + } + } + + if (successResponses.size() >= ack) { + if (request.getMethod() == Request.METHOD_GET) { + successResponses.sort(Comparator.comparingLong(r -> { + String timestamp = r.getHeader(NIO_TIMESTAMP_HEADER); + return timestamp == null ? 0 : Long.parseLong(timestamp); + })); + return successResponses.getLast(); + } else { + return successResponses.getFirst(); + } } else { - sendProxyRequest(session, httpRequest); + return new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY); } } } From 3241ea600b7fbc2dda5b005742185af8b406bafa Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 28 Mar 2024 13:28:19 +0300 Subject: [PATCH 34/60] Fix --- .../tuzikovalexandr/ConsistentHashing.java | 7 ++-- .../itmo/test/tuzikovalexandr/Constants.java | 3 ++ .../test/tuzikovalexandr/RequestHandler.java | 9 ++--- .../vk/itmo/test/tuzikovalexandr/Server.java | 1 - .../itmo/test/tuzikovalexandr/ServerImpl.java | 35 +++++++++++-------- .../dao/EntryWithTimestamp.java | 2 ++ .../test/tuzikovalexandr/dao/TableSet.java | 4 --- 7 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index 377cd3a84..9df759669 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -2,10 +2,7 @@ import one.nio.util.Hash; -import java.util.List; -import java.util.NavigableMap; -import java.util.SortedMap; -import java.util.TreeMap; +import java.util.*; public class ConsistentHashing { private final NavigableMap circle; @@ -37,7 +34,7 @@ public String getNode(String key) { public List getNodes(String key, int from) { if (circle.isEmpty()) { - return null; + return new ArrayList<>(); } final int hash = getHash(key); diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java index 26fd25a7d..c8c5e00a0 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java @@ -29,4 +29,7 @@ public final class Constants { public static final String HTTP_TIMESTAMP_HEADER = "X-Timestamp"; public static final String NIO_TIMESTAMP_HEADER = "x-timestamp:"; public static final String HTTP_TERMINATION_HEADER = "X-Termination"; + + private Constants() { + } } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java index 1a6a69703..91ff5450f 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java @@ -1,6 +1,9 @@ package ru.vk.itmo.test.tuzikovalexandr; -import one.nio.http.*; +import one.nio.http.Param; +import one.nio.http.Request; +import one.nio.http.Response; +import ru.vk.itmo.test.tuzikovalexandr.Constants; import ru.vk.itmo.test.tuzikovalexandr.dao.BaseEntryWithTimestamp; import ru.vk.itmo.test.tuzikovalexandr.dao.Dao; import ru.vk.itmo.test.tuzikovalexandr.dao.EntryWithTimestamp; @@ -9,8 +12,6 @@ import java.lang.foreign.ValueLayout; import java.nio.charset.StandardCharsets; -import static ru.vk.itmo.test.tuzikovalexandr.Constants.HTTP_TIMESTAMP_HEADER; - public class RequestHandler { private final Dao dao; @@ -77,7 +78,7 @@ private Response deleteEntry(@Param(value = "id", required = true) String id) { private Response sendResponseWithTimestamp(String resultCode, byte[] body, long timestamp) { Response response = new Response(resultCode, body); - response.addHeader(HTTP_TIMESTAMP_HEADER + timestamp); + response.addHeader(Constants.HTTP_TIMESTAMP_HEADER + timestamp); return response; } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index 3d6df4038..d55e101f4 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -20,7 +20,6 @@ public final class Server { private Server() { - } public static void main(String[] args) throws IOException { diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index b9b284ae3..92f7d8052 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -10,6 +10,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.test.tuzikovalexandr.Constants; import ru.vk.itmo.test.tuzikovalexandr.dao.Dao; import java.io.IOException; @@ -17,7 +18,12 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -25,8 +31,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import static ru.vk.itmo.test.tuzikovalexandr.Constants.*; - public class ServerImpl extends HttpServer { private final ExecutorService executorService; @@ -64,7 +68,7 @@ private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) @Override public void handleDefault(Request request, HttpSession session) throws IOException { Response response; - if (METHODS.contains(request.getMethod())) { + if (Constants.METHODS.contains(request.getMethod())) { response = new Response(Response.BAD_REQUEST, Response.EMPTY); } else { response = new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); @@ -75,7 +79,7 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti @Override public void handleRequest(Request request, HttpSession session) throws IOException { try { - if (!request.getURI().startsWith("/v0/entity?id=") || !METHODS.contains(request.getMethod())) { + if (!request.getURI().startsWith("/v0/entity?id=") || !Constants.METHODS.contains(request.getMethod())) { handleDefault(request, session); return; } @@ -108,7 +112,7 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti } }); } catch (RejectedExecutionException e) { - session.sendResponse(new Response(TOO_MANY_REQUESTS, Response.EMPTY)); + session.sendResponse(new Response(Constants.TOO_MANY_REQUESTS, Response.EMPTY)); } } @@ -120,7 +124,7 @@ private void processingRequest(Request request, HttpSession session, long proces } try { - if (request.getHeader(HTTP_TERMINATION_HEADER) == null) { + if (request.getHeader(Constants.HTTP_TERMINATION_HEADER) == null) { session.sendResponse(handleProxyRequest(request, session, paramId, from, ack)); } else { session.sendResponse(requestHandler.handle(request, paramId)); @@ -159,7 +163,7 @@ private HttpRequest createProxyRequest(Request request, String nodeUrl, String p .method(request.getMethodName(), request.getBody() == null ? HttpRequest.BodyPublishers.noBody() : HttpRequest.BodyPublishers.ofByteArray(request.getBody())) - .setHeader(HTTP_TERMINATION_HEADER, "true") + .setHeader(Constants.HTTP_TERMINATION_HEADER, "true") .build(); } @@ -167,16 +171,17 @@ private Response sendProxyRequest(HttpRequest httpRequest) { try { HttpResponse httpResponse = httpClient .sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) - .get(REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); + .get(Constants.REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); - String statusCode = HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); + String statusCode = Constants.HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); if (statusCode == null) { return new Response(Response.INTERNAL_ERROR, httpResponse.body()); } else { Response response = new Response(statusCode, httpResponse.body()); - long timestamp = httpRequest.headers().firstValueAsLong(HTTP_TIMESTAMP_HEADER).orElse(0); - response.addHeader(NIO_TIMESTAMP_HEADER + timestamp); + long timestamp = httpRequest.headers() + .firstValueAsLong(Constants.HTTP_TIMESTAMP_HEADER).orElse(0); + response.addHeader(Constants.NIO_TIMESTAMP_HEADER + timestamp); return response; } } catch (InterruptedException e) { @@ -202,7 +207,7 @@ private Response handleProxyRequest(Request request, HttpSession session, String List nodeUrls = consistentHashing.getNodes(paramId, from); if (nodeUrls.size() < from) { - sendResponse(session, new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY)); + sendResponse(session, new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY)); } HashMap httpRequests = new HashMap<>(nodeUrls.size()); @@ -226,7 +231,7 @@ private Response handleProxyRequest(Request request, HttpSession session, String if (successResponses.size() >= ack) { if (request.getMethod() == Request.METHOD_GET) { successResponses.sort(Comparator.comparingLong(r -> { - String timestamp = r.getHeader(NIO_TIMESTAMP_HEADER); + String timestamp = r.getHeader(Constants.NIO_TIMESTAMP_HEADER); return timestamp == null ? 0 : Long.parseLong(timestamp); })); return successResponses.getLast(); @@ -234,7 +239,7 @@ private Response handleProxyRequest(Request request, HttpSession session, String return successResponses.getFirst(); } } else { - return new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY); + return new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY); } } } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/EntryWithTimestamp.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/EntryWithTimestamp.java index c2e57cb0b..11a1e060d 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/EntryWithTimestamp.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/EntryWithTimestamp.java @@ -2,6 +2,8 @@ public interface EntryWithTimestamp { D key(); + D value(); + long timestamp(); } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/TableSet.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/TableSet.java index 238caec00..c801f70ae 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/TableSet.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/dao/TableSet.java @@ -176,10 +176,6 @@ EntryWithTimestamp get(final MemorySegment key) { return null; } -// private static EntryWithTimestamp swallowTombstone(final EntryWithTimestamp entry) { -// return entry.value() == null ? null : entry; -// } - EntryWithTimestamp upsert(final EntryWithTimestamp entry) { return memTable.upsert(entry); } From 5669c048d96adea93f68eac7d360aebeecfc0a58 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 28 Mar 2024 13:47:43 +0300 Subject: [PATCH 35/60] Fix --- .../test/tuzikovalexandr/ConsistentHashing.java | 13 ++++++++++--- .../ru/vk/itmo/test/tuzikovalexandr/Server.java | 2 +- .../ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 1 - .../vk/itmo/test/tuzikovalexandr/ServiceImpl.java | 1 - 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index 9df759669..ae4009500 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -2,7 +2,14 @@ import one.nio.util.Hash; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.NavigableMap; +import java.util.SortedMap; +import java.util.stream.Collectors; +import java.util.TreeMap; + + public class ConsistentHashing { private final NavigableMap circle; @@ -39,8 +46,8 @@ public List getNodes(String key, int from) { final int hash = getHash(key); SortedMap tailMap = circle.tailMap(hash); - return (tailMap.isEmpty() ? circle.values() : tailMap.values()) - .stream().limit(from).toList(); + return (tailMap.isEmpty() ? circle : tailMap).values() + .stream().limit(from).collect(Collectors.toList()); } private int getHash(String key) { diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index d55e101f4..4f3da9551 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -49,4 +49,4 @@ public static void main(String[] args) throws IOException { server.start(); } } -} +} \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 92f7d8052..e0aecc2dc 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -10,7 +10,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.vk.itmo.ServiceConfig; -import ru.vk.itmo.test.tuzikovalexandr.Constants; import ru.vk.itmo.test.tuzikovalexandr.dao.Dao; import java.io.IOException; diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index a30ba2fb3..df8cdb7da 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -3,7 +3,6 @@ import ru.vk.itmo.Service; import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.Config; - import ru.vk.itmo.test.ServiceFactory; import ru.vk.itmo.test.tuzikovalexandr.dao.Dao; import ru.vk.itmo.test.tuzikovalexandr.dao.ReferenceDao; From 37af132c2eec350fde46917c4a7874416924100a Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 28 Mar 2024 13:51:11 +0300 Subject: [PATCH 36/60] Fix --- .../ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java | 4 +--- src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index ae4009500..519c1e83e 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -6,10 +6,8 @@ import java.util.List; import java.util.NavigableMap; import java.util.SortedMap; -import java.util.stream.Collectors; import java.util.TreeMap; - - +import java.util.stream.Collectors; public class ConsistentHashing { private final NavigableMap circle; diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java index 4f3da9551..7f65cfc5f 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Server.java @@ -16,7 +16,6 @@ import static ru.vk.itmo.test.tuzikovalexandr.Constants.FLUSHING_THRESHOLD_BYTES; import static ru.vk.itmo.test.tuzikovalexandr.Constants.NUMBER_OF_VIRTUAL_NODES; - public final class Server { private Server() { @@ -49,4 +48,5 @@ public static void main(String[] args) throws IOException { server.start(); } } -} \ No newline at end of file +} + From d7d30af51d0cbb6df908499146cf8a2563d598ae Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 28 Mar 2024 14:32:26 +0300 Subject: [PATCH 37/60] Fix --- .../itmo/test/tuzikovalexandr/ConsistentHashing.java | 12 ++++++++++++ .../ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index 519c1e83e..7d0cc0166 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.NavigableMap; import java.util.SortedMap; import java.util.TreeMap; @@ -48,6 +49,17 @@ public List getNodes(String key, int from) { .stream().limit(from).collect(Collectors.toList()); } + List getNodes(String key, List clusterUrls, int from) { + Map nodesHashes = new TreeMap<>(); + + for (String nodeUrl : clusterUrls) { + nodesHashes.put(Hash.murmur3(nodeUrl + key), nodeUrl); + } + + return nodesHashes.values().stream().limit(from) + .collect(Collectors.toList()); + } + private int getHash(String key) { return Hash.murmur3(key); } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index e0aecc2dc..b62cf7b9b 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -35,6 +35,7 @@ public class ServerImpl extends HttpServer { private final ExecutorService executorService; private final HttpClient httpClient; private final ConsistentHashing consistentHashing; + private final List clusterUrls; private final RequestHandler requestHandler; private static final Logger log = LoggerFactory.getLogger(ServerImpl.class); @@ -48,6 +49,7 @@ public ServerImpl(ServiceConfig config, Dao dao, Worker worker, this.consistentHashing = consistentHashing; this.selfUrl = config.selfUrl(); this.clusterSize = config.clusterUrls().size(); + this.clusterUrls = config.clusterUrls(); this.requestHandler = new RequestHandler(dao); this.httpClient = HttpClient.newBuilder() .executor(Executors.newFixedThreadPool(2)).build(); @@ -203,7 +205,7 @@ private List sendProxyRequests(Map httpRequests, } private Response handleProxyRequest(Request request, HttpSession session, String paramId, int from, int ack) { - List nodeUrls = consistentHashing.getNodes(paramId, from); + List nodeUrls = consistentHashing.getNodes(paramId, clusterUrls, from); if (nodeUrls.size() < from) { sendResponse(session, new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY)); From 2b41fcd7b92dfe9360b9d071445bc3ecad315e80 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 28 Mar 2024 15:02:09 +0300 Subject: [PATCH 38/60] Fix --- .../ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java | 1 - .../java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java index 91ff5450f..72e4d9070 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/RequestHandler.java @@ -3,7 +3,6 @@ import one.nio.http.Param; import one.nio.http.Request; import one.nio.http.Response; -import ru.vk.itmo.test.tuzikovalexandr.Constants; import ru.vk.itmo.test.tuzikovalexandr.dao.BaseEntryWithTimestamp; import ru.vk.itmo.test.tuzikovalexandr.dao.Dao; import ru.vk.itmo.test.tuzikovalexandr.dao.EntryWithTimestamp; diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index b62cf7b9b..5c74bba23 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -119,7 +119,7 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti private void processingRequest(Request request, HttpSession session, long processingStartTime, String paramId, int from, int ack) throws IOException { - if (System.currentTimeMillis() - processingStartTime > 500) { + if (System.currentTimeMillis() - processingStartTime > 350) { session.sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); return; } @@ -235,9 +235,9 @@ private Response handleProxyRequest(Request request, HttpSession session, String String timestamp = r.getHeader(Constants.NIO_TIMESTAMP_HEADER); return timestamp == null ? 0 : Long.parseLong(timestamp); })); - return successResponses.getLast(); - } else { return successResponses.getFirst(); + } else { + return successResponses.getLast(); } } else { return new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY); From 820a89459f41f95d4c94ece98706d8b7403f949e Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 3 Apr 2024 21:09:54 +0300 Subject: [PATCH 39/60] Add part of report --- .../stage4/put-profile-1th-1con-3000.txt | 80 +++++++++++++++++++ .../stage4/put-profile-4th-64con-30000.txt | 70 ++++++++++++++++ .../tuzikovalexandr/results/stage4/report.md | 45 +++++++++++ 3 files changed, 195 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-3000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-4th-64con-30000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-3000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-3000.txt new file mode 100644 index 000000000..ce1d586d9 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-3000.txt @@ -0,0 +1,80 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 5576.284ms, rate sampling interval: 18202ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 20.05s 5.19s 27.46s 62.80% + Req/Sec 309.00 0.00 309.00 100.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 21.04s + 75.000% 24.48s + 90.000% 25.85s + 99.000% 27.34s + 99.900% 27.46s + 99.990% 27.48s + 99.999% 27.48s +100.000% 27.48s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 9560.063 0.000000 2 1.00 + 11526.143 0.100000 623 1.11 + 14393.343 0.200000 1246 1.25 + 18268.159 0.300000 1870 1.43 + 19890.175 0.400000 2497 1.67 + 21037.055 0.500000 3120 2.00 + 21905.407 0.550000 3428 2.22 + 22446.079 0.600000 3736 2.50 + 23429.119 0.650000 4057 2.86 + 23822.335 0.700000 4366 3.33 + 24477.695 0.750000 4683 4.00 + 24657.919 0.775000 4829 4.44 + 24838.143 0.800000 4991 5.00 + 25133.055 0.825000 5137 5.71 + 25329.663 0.850000 5304 6.67 + 25509.887 0.875000 5455 8.00 + 25706.495 0.887500 5530 8.89 + 25853.951 0.900000 5607 10.00 + 25985.023 0.912500 5683 11.43 + 26198.015 0.925000 5760 13.33 + 26427.391 0.937500 5837 16.00 + 26542.079 0.943750 5878 17.78 + 26656.767 0.950000 5917 20.00 + 26755.071 0.956250 5954 22.86 + 26869.759 0.962500 5997 26.67 + 26968.063 0.968750 6032 32.00 + 27033.599 0.971875 6056 35.56 + 27082.751 0.975000 6074 40.00 + 27131.903 0.978125 6096 45.71 + 27181.055 0.981250 6110 53.33 + 27262.975 0.984375 6132 64.00 + 27295.743 0.985938 6144 71.11 + 27312.127 0.987500 6151 80.00 + 27344.895 0.989062 6164 91.43 + 27361.279 0.990625 6171 106.67 + 27377.663 0.992188 6179 128.00 + 27394.047 0.992969 6188 142.22 + 27394.047 0.993750 6188 160.00 + 27410.431 0.994531 6195 182.86 + 27426.815 0.995313 6203 213.33 + 27426.815 0.996094 6203 256.00 + 27443.199 0.996484 6211 284.44 + 27443.199 0.996875 6211 320.00 + 27443.199 0.997266 6211 365.71 + 27459.583 0.997656 6220 426.67 + 27459.583 0.998047 6220 512.00 + 27459.583 0.998242 6220 568.89 + 27459.583 0.998437 6220 640.00 + 27459.583 0.998633 6220 731.43 + 27459.583 0.998828 6220 853.33 + 27459.583 0.999023 6220 1024.00 + 27475.967 0.999121 6226 1137.78 + 27475.967 1.000000 6226 inf +#[Mean = 20052.929, StdDeviation = 5191.872] +#[Max = 27459.584, Total count = 6226] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 7576 requests in 30.00s, 495.70KB read +Requests/sec: 252.54 +Transfer/sec: 16.52KB + diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-4th-64con-30000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-4th-64con-30000.txt new file mode 100644 index 000000000..f0b06e62c --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-4th-64con-30000.txt @@ -0,0 +1,70 @@ +Running 30s test @ http://localhost:8080 + 4 threads and 64 connections + Thread calibration: mean lat.: 5248.662ms, rate sampling interval: 18350ms + Thread calibration: mean lat.: 5246.218ms, rate sampling interval: 18350ms + Thread calibration: mean lat.: 5246.104ms, rate sampling interval: 18350ms + Thread calibration: mean lat.: 5246.218ms, rate sampling interval: 18350ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 20.06s 5.76s 29.75s 57.58% + Req/Sec 26.00 0.00 26.00 100.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 20.07s + 75.000% 24.92s + 90.000% 27.93s + 99.000% 29.74s + 99.900% 29.77s + 99.990% 29.77s + 99.999% 29.77s +100.000% 29.77s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 10338.303 0.000000 3 1.00 + 12181.503 0.100000 215 1.11 + 14008.319 0.200000 425 1.25 + 15851.519 0.300000 637 1.43 + 18251.775 0.400000 859 1.67 + 20070.399 0.500000 1056 2.00 + 21250.047 0.550000 1164 2.22 + 21905.407 0.600000 1271 2.50 + 23085.055 0.650000 1374 2.86 + 24264.703 0.700000 1480 3.33 + 24920.063 0.750000 1584 4.00 + 25509.887 0.775000 1641 4.44 + 26099.711 0.800000 1692 5.00 + 26689.535 0.825000 1743 5.71 + 27295.743 0.850000 1810 6.67 + 27344.895 0.875000 1848 8.00 + 27901.951 0.887500 1875 8.89 + 27934.719 0.900000 1903 10.00 + 28491.775 0.912500 1931 11.43 + 28524.543 0.925000 1955 13.33 + 28557.311 0.937500 1981 16.00 + 29097.983 0.943750 1996 17.78 + 29114.367 0.950000 2009 20.00 + 29130.751 0.956250 2025 22.86 + 29147.135 0.962500 2035 26.67 + 29163.519 0.968750 2048 32.00 + 29704.191 0.971875 2062 35.56 + 29704.191 0.975000 2062 40.00 + 29720.575 0.978125 2076 45.71 + 29720.575 0.981250 2076 53.33 + 29736.959 0.984375 2091 64.00 + 29736.959 0.985938 2091 71.11 + 29736.959 0.987500 2091 80.00 + 29736.959 0.989062 2091 91.43 + 29753.343 0.990625 2100 106.67 + 29753.343 0.992188 2100 128.00 + 29753.343 0.992969 2100 142.22 + 29753.343 0.993750 2100 160.00 + 29769.727 0.994531 2112 182.86 + 29769.727 1.000000 2112 inf +#[Mean = 20057.018, StdDeviation = 5759.813] +#[Max = 29753.344, Total count = 2112] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 3136 requests in 30.10s, 228.92KB read + Non-2xx or 3xx responses: 3038 +Requests/sec: 104.20 +Transfer/sec: 7.61KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md new file mode 100644 index 000000000..5610e0f58 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md @@ -0,0 +1,45 @@ +## Начальные сведения +* Виртуалке были даны 2 ядра (будем надеяться, что не помрет) +* Конфигурация кластера: 3 ноды +* Реплицирование по умолчанию (2/3) + +## PUT 30000 30s 4 threads 64 con + +Сначала попробуем найти новую точку разладки. Сравнивая входные данные с прошлого этапа, что почему-то больше 1 потока +и 1 соединения не проходило, количество запросов упало до 3000-5000. В этот раз мало что изменилось. По входных данным +4 потока и 64 соединения результаты в [put-profile-4th-64con-30000.txt](put-profile-4th-64con-30000.txt). Очень мало +запросов в приципе успевают обработаться и большинство ловят TimeOut. + +``` + 50.000% 20.07s + 75.000% 24.92s + 90.000% 27.93s + 99.000% 29.74s + 99.900% 29.77s + 99.990% 29.77s + 99.999% 29.77s +100.000% 29.77s +``` + +## PUT 3000 30s 1 thread 1 con + +Тогда вернемся к работающим входным данным прошлого этапа. Результаты эксперимента в сравнении с прошлым этапом при +1 поток, 1 соединение, 3000 запросов приведены ниже. + +``` + было стало + 50.000% 19.55s 21.04s + 75.000% 23.79s 24.48s + 90.000% 25.85s 25.85s + 99.000% 27.34s 27.34s + 99.900% 27.46s 27.46s + 99.990% 27.46s 27.48s + 99.999% 27.46s 27.48s +100.000% 27.46s 27.48s +``` + +На 50-ом перцентиле время выросло, на других в прицнипе не изменилось. Также можно отметить, что по результатам +подобного эксперимента на прошлом этапе и на этом меньше половины запросов успевают обработаться. + +При времени 30 секунд и 3000 запросов результат: 7576 requests in 30.00s, 495.70KB read. Я все же предполагаю, что это +из-за предоставленных виртуалке ресурсов. \ No newline at end of file From 6cd09ce5accf6510c50a4ab7fed76acb81d0d6ea Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 3 Apr 2024 21:33:09 +0300 Subject: [PATCH 40/60] Add part of report --- .../stage4/get-profile-1th-1con-5000.txt | 89 + .../results/stage4/get-profile-1th-alloc.html | 2773 +++++++++++++++++ .../results/stage4/get-profile-1th-cpu.html | 2543 +++++++++++++++ .../results/stage4/get-profile-1th-lock.html | 575 ++++ .../stage4/put-profile-1th-1con-10000.txt | 82 + .../stage4/put-profile-1th-1con-5000.txt | 77 + .../results/stage4/put-profile-1th-alloc.html | 2370 ++++++++++++++ .../results/stage4/put-profile-1th-cpu.html | 2551 +++++++++++++++ .../results/stage4/put-profile-1th-lock.html | 496 +++ 9 files changed, 11556 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-1con-5000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-10000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-5000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-lock.html diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-1con-5000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-1con-5000.txt new file mode 100644 index 000000000..7a126422e --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-1con-5000.txt @@ -0,0 +1,89 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 4686.726ms, rate sampling interval: 16744ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 19.67s 5.70s 28.56s 58.17% + Req/Sec 189.00 0.00 189.00 100.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 19.96s + 75.000% 24.76s + 90.000% 27.25s + 99.000% 28.48s + 99.900% 28.56s + 99.990% 28.57s + 99.999% 28.57s +100.000% 28.57s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 9388.031 0.000000 2 1.00 + 11567.103 0.100000 400 1.11 + 13664.255 0.200000 798 1.25 + 15998.975 0.300000 1198 1.43 + 17809.407 0.400000 1596 1.67 + 19955.711 0.500000 1996 2.00 + 20889.599 0.550000 2198 2.22 + 21839.871 0.600000 2396 2.50 + 23035.903 0.650000 2594 2.86 + 24018.943 0.700000 2793 3.33 + 24756.223 0.750000 2995 4.00 + 25133.055 0.775000 3094 4.44 + 25608.191 0.800000 3195 5.00 + 26083.327 0.825000 3292 5.71 + 26509.311 0.850000 3391 6.67 + 26951.679 0.875000 3493 8.00 + 27115.519 0.887500 3542 8.89 + 27246.591 0.900000 3593 10.00 + 27410.431 0.912500 3641 11.43 + 27656.191 0.925000 3691 13.33 + 27820.031 0.937500 3742 16.00 + 27901.951 0.943750 3768 17.78 + 27967.487 0.950000 3790 20.00 + 28049.407 0.956250 3820 22.86 + 28114.943 0.962500 3839 26.67 + 28246.015 0.968750 3865 32.00 + 28278.783 0.971875 3876 35.56 + 28311.551 0.975000 3889 40.00 + 28360.703 0.978125 3906 45.71 + 28409.855 0.981250 3919 53.33 + 28426.239 0.984375 3927 64.00 + 28442.623 0.985938 3936 71.11 + 28459.007 0.987500 3944 80.00 + 28475.391 0.989062 3953 91.43 + 28475.391 0.990625 3953 106.67 + 28491.775 0.992188 3961 128.00 + 28491.775 0.992969 3961 142.22 + 28508.159 0.993750 3968 160.00 + 28508.159 0.994531 3968 182.86 + 28524.543 0.995313 3975 213.33 + 28524.543 0.996094 3975 256.00 + 28524.543 0.996484 3975 284.44 + 28540.927 0.996875 3982 320.00 + 28540.927 0.997266 3982 365.71 + 28540.927 0.997656 3982 426.67 + 28540.927 0.998047 3982 512.00 + 28540.927 0.998242 3982 568.89 + 28540.927 0.998437 3982 640.00 + 28557.311 0.998633 3987 731.43 + 28557.311 0.998828 3987 853.33 + 28557.311 0.999023 3987 1024.00 + 28557.311 0.999121 3987 1137.78 + 28557.311 0.999219 3987 1280.00 + 28557.311 0.999316 3987 1462.86 + 28557.311 0.999414 3987 1706.67 + 28557.311 0.999512 3987 2048.00 + 28557.311 0.999561 3987 2275.56 + 28557.311 0.999609 3987 2560.00 + 28557.311 0.999658 3987 2925.71 + 28557.311 0.999707 3987 3413.33 + 28573.695 0.999756 3988 4096.00 + 28573.695 1.000000 3988 inf +#[Mean = 19668.730, StdDeviation = 5696.379] +#[Max = 28557.312, Total count = 3988] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 7101 requests in 30.00s, 581.69KB read + Non-2xx or 3xx responses: 6351 +Requests/sec: 236.73 +Transfer/sec: 19.39KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-alloc.html new file mode 100644 index 000000000..bf0c93a44 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-alloc.html @@ -0,0 +1,2773 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-cpu.html new file mode 100644 index 000000000..5d4be2144 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-cpu.html @@ -0,0 +1,2543 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-lock.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-lock.html new file mode 100644 index 000000000..dc73481b5 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/get-profile-1th-lock.html @@ -0,0 +1,575 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-10000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-10000.txt new file mode 100644 index 000000000..1d925efdb --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-10000.txt @@ -0,0 +1,82 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 4086.880ms, rate sampling interval: 16121ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 19.05s 5.50s 28.98s 58.32% + Req/Sec 340.00 0.00 340.00 100.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 18.61s + 75.000% 23.74s + 90.000% 27.02s + 99.000% 28.80s + 99.900% 28.98s + 99.990% 29.00s + 99.999% 29.00s +100.000% 29.00s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 9674.751 0.000000 1 1.00 + 11616.255 0.100000 665 1.11 + 13402.111 0.200000 1327 1.25 + 15474.687 0.300000 1990 1.43 + 17121.279 0.400000 2656 1.67 + 18612.223 0.500000 3316 2.00 + 19513.343 0.550000 3647 2.22 + 20676.607 0.600000 3979 2.50 + 21676.031 0.650000 4309 2.86 + 22642.687 0.700000 4638 3.33 + 23740.415 0.750000 4974 4.00 + 24231.935 0.775000 5138 4.44 + 24707.071 0.800000 5300 5.00 + 25182.207 0.825000 5473 5.71 + 25722.879 0.850000 5632 6.67 + 26574.847 0.875000 5801 8.00 + 26804.223 0.887500 5885 8.89 + 27017.215 0.900000 5966 10.00 + 27279.359 0.912500 6048 11.43 + 27525.119 0.925000 6133 13.33 + 27770.879 0.937500 6215 16.00 + 27901.951 0.943750 6253 17.78 + 28033.023 0.950000 6297 20.00 + 28147.711 0.956250 6337 22.86 + 28278.783 0.962500 6382 26.67 + 28393.471 0.968750 6422 32.00 + 28475.391 0.971875 6443 35.56 + 28524.543 0.975000 6461 40.00 + 28573.695 0.978125 6481 45.71 + 28639.231 0.981250 6503 53.33 + 28704.767 0.984375 6526 64.00 + 28721.151 0.985938 6532 71.11 + 28753.919 0.987500 6543 80.00 + 28786.687 0.989062 6555 91.43 + 28819.455 0.990625 6566 106.67 + 28852.223 0.992188 6577 128.00 + 28868.607 0.992969 6582 142.22 + 28884.991 0.993750 6588 160.00 + 28901.375 0.994531 6593 182.86 + 28917.759 0.995313 6599 213.33 + 28934.143 0.996094 6605 256.00 + 28934.143 0.996484 6605 284.44 + 28934.143 0.996875 6605 320.00 + 28950.527 0.997266 6610 365.71 + 28950.527 0.997656 6610 426.67 + 28966.911 0.998047 6616 512.00 + 28966.911 0.998242 6616 568.89 + 28966.911 0.998437 6616 640.00 + 28966.911 0.998633 6616 731.43 + 28983.295 0.998828 6621 853.33 + 28983.295 0.999023 6621 1024.00 + 28983.295 0.999121 6621 1137.78 + 28983.295 0.999219 6621 1280.00 + 28983.295 0.999316 6621 1462.86 + 28999.679 0.999414 6625 1706.67 + 28999.679 1.000000 6625 inf +#[Mean = 19050.304, StdDeviation = 5501.017] +#[Max = 28983.296, Total count = 6625] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 10002 requests in 30.01s, 654.43KB read +Requests/sec: 333.30 +Transfer/sec: 21.81KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-5000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-5000.txt new file mode 100644 index 000000000..b77154054 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-1con-5000.txt @@ -0,0 +1,77 @@ +Running 10s test @ http://localhost:8080 + 1 threads and 1 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 4.93s 2.69s 9.32s 58.58% + Req/Sec -nan -nan 0.00 0.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 5.12s + 75.000% 7.24s + 90.000% 8.55s + 99.000% 9.26s + 99.900% 9.33s + 99.990% 9.33s + 99.999% 9.33s +100.000% 9.33s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 7.491 0.000000 1 1.00 + 1073.151 0.100000 333 1.11 + 2095.103 0.200000 666 1.25 + 3074.047 0.300000 999 1.43 + 4251.647 0.400000 1331 1.67 + 5115.903 0.500000 1664 2.00 + 5545.983 0.550000 1831 2.22 + 6070.271 0.600000 1997 2.50 + 6471.679 0.650000 2164 2.86 + 6868.991 0.700000 2329 3.33 + 7241.727 0.750000 2496 4.00 + 7446.527 0.775000 2580 4.44 + 7622.655 0.800000 2662 5.00 + 7876.607 0.825000 2746 5.71 + 8097.791 0.850000 2829 6.67 + 8310.783 0.875000 2912 8.00 + 8437.759 0.887500 2954 8.89 + 8560.639 0.900000 2997 10.00 + 8658.943 0.912500 3038 11.43 + 8740.863 0.925000 3079 13.33 + 8839.167 0.937500 3121 16.00 + 8880.127 0.943750 3140 17.78 + 8921.087 0.950000 3161 20.00 + 8970.239 0.956250 3182 22.86 + 9035.775 0.962500 3204 26.67 + 9093.119 0.968750 3226 32.00 + 9117.695 0.971875 3236 35.56 + 9142.271 0.975000 3246 40.00 + 9166.847 0.978125 3257 45.71 + 9191.423 0.981250 3267 53.33 + 9215.999 0.984375 3276 64.00 + 9232.383 0.985938 3282 71.11 + 9240.575 0.987500 3286 80.00 + 9256.959 0.989062 3294 91.43 + 9265.151 0.990625 3298 106.67 + 9273.343 0.992188 3302 128.00 + 9281.535 0.992969 3306 142.22 + 9289.727 0.993750 3310 160.00 + 9289.727 0.994531 3310 182.86 + 9297.919 0.995313 3313 213.33 + 9306.111 0.996094 3317 256.00 + 9306.111 0.996484 3317 284.44 + 9306.111 0.996875 3317 320.00 + 9314.303 0.997266 3320 365.71 + 9314.303 0.997656 3320 426.67 + 9322.495 0.998047 3323 512.00 + 9322.495 0.998242 3323 568.89 + 9322.495 0.998437 3323 640.00 + 9322.495 0.998633 3323 731.43 + 9330.687 0.998828 3327 853.33 + 9330.687 1.000000 3327 inf +#[Mean = 4929.661, StdDeviation = 2694.559] +#[Max = 9322.496, Total count = 3327] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 3328 requests in 10.00s, 217.75KB read +Requests/sec: 332.77 +Transfer/sec: 21.77KB + diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-alloc.html new file mode 100644 index 000000000..88a6fb88d --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-alloc.html @@ -0,0 +1,2370 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-cpu.html new file mode 100644 index 000000000..353b05ada --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-cpu.html @@ -0,0 +1,2551 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-lock.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-lock.html new file mode 100644 index 000000000..f01062fbf --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/put-profile-1th-lock.html @@ -0,0 +1,496 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ From 0b17813444e728539f37ccb007fd34b7432d8602 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 3 Apr 2024 22:23:38 +0300 Subject: [PATCH 41/60] Add part of report --- .../tuzikovalexandr/results/stage4/report.md | 82 ++++++++++++++++--- 1 file changed, 72 insertions(+), 10 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md index 5610e0f58..f3819442f 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md @@ -28,18 +28,80 @@ ``` было стало - 50.000% 19.55s 21.04s - 75.000% 23.79s 24.48s - 90.000% 25.85s 25.85s - 99.000% 27.34s 27.34s - 99.900% 27.46s 27.46s - 99.990% 27.46s 27.48s - 99.999% 27.46s 27.48s -100.000% 27.46s 27.48s -``` + 50.000% 19.32s 21.04s + 75.000% 23.40s 24.48s + 90.000% 26.05s 25.85s + 99.000% 27.61s 27.34s + 99.900% 27.69s 27.46s + 99.990% 27.71s 27.48s + 99.999% 27.71s 27.48s +100.000% 27.71s 27.48s +``` На 50-ом перцентиле время выросло, на других в прицнипе не изменилось. Также можно отметить, что по результатам подобного эксперимента на прошлом этапе и на этом меньше половины запросов успевают обработаться. При времени 30 секунд и 3000 запросов результат: 7576 requests in 30.00s, 495.70KB read. Я все же предполагаю, что это -из-за предоставленных виртуалке ресурсов. \ No newline at end of file +из-за предоставленных виртуалке ресурсов. + +Также стоит отметить, что при добавлении пересылки по сети из-за наличия реплицирования, время обработки должно +было увеличиться. Однако об этом сложно судить при таких результатах эксперимента. + +## CPU + +[put-profile-1th-cpu.html](put-profile-1th-cpu.html) + +В сравнении с прошлым этапом ситуация особым образом не поменялась. Все также тратиться время на отправку ответа +клиенту и ожидание ответа от других нод. Еще также сама обработка логики. Больше всего времени остается за операцией +Unsafe.park (3.34%), которая, как я понимаю, и занимается блокировкой и ожиданием потока. + +Так как в этом этапе происходила работа с хэдерами запросом (0.30%), теперь они также отражаются на фрейм-графах. + +В другой нагрузке: +- ThreadPoolExecutor.runWorker: с 24.07% до 46.93% увеличилось. Работа с запросами происходит в основном в ворекерах, +соответсвенно и увеличилась нагрузка. +- HttpClientImpl$SelectorManager.run: с 11.14% до 20.10% увеличилось. Предположение: из-за работы с http-запросами. +- ThreadPoolExecutor.getTask: с 9.30% до 16.70% увеличилось + +## ALLOC + +[put-profile-1th-alloc.html](put-profile-1th-alloc.html) + + + +## LOCK + +[put-profile-1th-lock.html](put-profile-1th-lock.html) + +## GET 5000 30s 1 thread 1 con + +Аналогично как и с запросами PUT было решение попробовать при тех же входных данных, как в прошлом этапе, то есть +1 соединение, 1 поток, 5000 запросов. Результаты перцентилей приведены ниже. + +``` + было стало + 50.000% 19.55s 19.96s + 75.000% 23.79s 24.76s + 90.000% 25.85s 27.25s + 99.000% 27.34s 28.48s + 99.900% 27.46s 28.56s + 99.990% 27.46s 28.57s + 99.999% 27.46s 28.57s +100.000% 27.46s 28.57s +``` + +Видно, что время вырасло на секунды. Но предполагая также как и с PUT-запросами сложно судить, произошло это из-за +наличия реплицирования или из-за ресурсов виртуалки. + +## CPU + +[get-profile-1th-cpu.html](get-profile-1th-cpu.html) + +## ALLOC + +[get-profile-1th-alloc.html](get-profile-1th-alloc.html) + +## LOCK + +[get-profile-1th-lock.html](get-profile-1th-lock.html) + From 8b6f88c517d2818652d5b003344c9f355c0d8d20 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 3 Apr 2024 23:13:23 +0300 Subject: [PATCH 42/60] Add part of report --- .../tuzikovalexandr/results/stage4/report.md | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md index f3819442f..8b74b9497 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md @@ -67,12 +67,17 @@ Unsafe.park (3.34%), которая, как я понимаю, и занимае [put-profile-1th-alloc.html](put-profile-1th-alloc.html) - +По аллокациям ситуация с прошлым этапом особо не отличается. Отличается только расходование ресерсов у некоторых +семплов. Странно, что Server.processingRequest стал меньше потреблять: с 26.43% уменьшилось до 24.65%. Также еще ресурсы +расходуются на построение http запросов к нескольким узлам сразу. ## LOCK [put-profile-1th-lock.html](put-profile-1th-lock.html) +- HttpClientImpl$SelectorManager.run: с 64.47% уменьшилось до 50.74%. Хотя запросов стало больше. +- ThreadPoolExecutor.runWorker: с 2.16% до 3.25% увеличилось. Все ресурсы уходят на HttpSession.sendResponse. + ## GET 5000 30s 1 thread 1 con Аналогично как и с запросами PUT было решение попробовать при тех же входных данных, как в прошлом этапе, то есть @@ -97,11 +102,36 @@ Unsafe.park (3.34%), которая, как я понимаю, и занимае [get-profile-1th-cpu.html](get-profile-1th-cpu.html) +- ThreadPoolExecutor.runWorker: с 20.85% до 19.68% уменьшилось. +- HttpClientImpl$SelectorManager.run: с 16.62% до 19.92% увеличилось. +- ThreadPoolExecutor.getTask: с 14.26% до 17.16% увеличилось. +- Server.processingRequest: с 17.40% до 15.90% уменьшилось. Тоже немного странно, что уменьшилось, когда количество +работы наоборот увеиличилось. + ## ALLOC [get-profile-1th-alloc.html](get-profile-1th-alloc.html) +- HttpClientImpl$SelectorManager.run: на предудыщем этапе его вообще не было видно, на графе этого этапа 6.43%. +Должно было увелиться, так как при рабое с клиентом появляются дополниельные аллокации. +- Server.processingRequest: тоже на предыдущих не было видно, на графе этого этапа 28.55%. Аналогично, что должно быть +увеличение, так как работа с клиентом, парсинг ответов и т.д. + ## LOCK [get-profile-1th-lock.html](get-profile-1th-lock.html) +- HttpClientImpl$SelectorManager.run: с 44.61% уменьшилось до 44.01%. Также странно, как и при PUT-запросах. +- ThreadPoolExecutor.runWorker: с 11.76% до 4.61% уменьшилось. + +## Выводы + +- Сложно делать какие-то конкретные выводы ввиду непонимая причин плохих показателей у wrk, но предположение, что из-за +репликации произошли ухудшения, можно вынести. Но само хранение данных стало более надежным из-за наличия реплик. +- Также плюсом является то, что можно указать необходимое количество узлов для запроса. Так можно лавировать между +скоростью на запись и скоростью на чтение. + +## Улучшения + +- Добавление асинхронности к клиенту, чтоб слать запросы параллельно. При том, что есть параметры from и ack, можно +дождаться ответа только от ack узлов. \ No newline at end of file From d0cf8a336afd9135b848a071cde8fae492686237 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 3 Apr 2024 23:14:40 +0300 Subject: [PATCH 43/60] Add report --- .../ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md index 8b74b9497..ab3cdc6e3 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage4/report.md @@ -134,4 +134,6 @@ Unsafe.park (3.34%), которая, как я понимаю, и занимае ## Улучшения - Добавление асинхронности к клиенту, чтоб слать запросы параллельно. При том, что есть параметры from и ack, можно -дождаться ответа только от ack узлов. \ No newline at end of file +дождаться ответа только от ack узлов. + +P.S. Спасибо большое виртуалке, что за время написания отчета и проведения экспериментов она ниразу не умерла. \ No newline at end of file From 540b67c28d90b7acbfe42444a309a0010d734e01 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Tue, 9 Apr 2024 21:29:15 +0300 Subject: [PATCH 44/60] Add solution --- .../itmo/test/tuzikovalexandr/Constants.java | 1 + .../itmo/test/tuzikovalexandr/ServerImpl.java | 161 +++++++++++------- 2 files changed, 105 insertions(+), 57 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java index c8c5e00a0..c3d2689f1 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java @@ -13,6 +13,7 @@ public final class Constants { ); public static final String TOO_MANY_REQUESTS = "429 Too Many Requests"; public static final String NOT_ENOUGH_REPLICAS = "504 Not Enough Replicas"; + public static final int SERVER_ERROR = 500; public static final int REQUEST_TIMEOUT = 300; public static final Map HTTP_CODE = Map.of( HttpURLConnection.HTTP_OK, Response.OK, diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 5c74bba23..2c72a7d4c 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -23,12 +23,8 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicInteger; public class ServerImpl extends HttpServer { @@ -119,16 +115,19 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti private void processingRequest(Request request, HttpSession session, long processingStartTime, String paramId, int from, int ack) throws IOException { - if (System.currentTimeMillis() - processingStartTime > 350) { + if (System.currentTimeMillis() - processingStartTime > Constants.REQUEST_TIMEOUT) { session.sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); return; } try { if (request.getHeader(Constants.HTTP_TERMINATION_HEADER) == null) { - session.sendResponse(handleProxyRequest(request, session, paramId, from, ack)); + CompletableFuture handleProxyResponse = + handleProxyRequest(request, session, paramId, from, ack); + handleProxyResponse.whenComplete((response, throwable) -> sendResponse(session, response)); + checkingTimeout(handleProxyResponse); } else { - session.sendResponse(requestHandler.handle(request, paramId)); + sendResponse(session, requestHandler.handle(request, paramId)); } } catch (Exception e) { if (e.getClass() == HttpException.class) { @@ -140,15 +139,15 @@ private void processingRequest(Request request, HttpSession session, long proces } } - private Response sendException(Exception exception) { - String responseCode; - if (exception.getClass().equals(TimeoutException.class)) { - responseCode = Response.REQUEST_TIMEOUT; - } else { - responseCode = Response.INTERNAL_ERROR; - } - return new Response(responseCode, Response.EMPTY); - } +// private Response sendException(Exception exception) { +// String responseCode; +// if (exception.getClass().equals(TimeoutException.class)) { +// responseCode = Response.REQUEST_TIMEOUT; +// } else { +// responseCode = Response.INTERNAL_ERROR; +// } +// return new Response(responseCode, Response.EMPTY); +// } private void sendResponse(HttpSession session, Response response) { try { @@ -168,33 +167,63 @@ private HttpRequest createProxyRequest(Request request, String nodeUrl, String p .build(); } - private Response sendProxyRequest(HttpRequest httpRequest) { - try { - HttpResponse httpResponse = httpClient - .sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) - .get(Constants.REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); - - String statusCode = Constants.HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); - if (statusCode == null) { - return new Response(Response.INTERNAL_ERROR, httpResponse.body()); - } else { + private CompletableFuture sendProxyRequest(HttpRequest httpRequest) { + final CompletableFuture httpResponse = new CompletableFuture<>(); + httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) + .whenComplete((response, throwable) -> { + if (throwable != null) { + httpResponse.completeExceptionally(throwable); + return; + } + httpResponse.complete(processingResponse(response)); + }); + + return httpResponse; +// try { +// final CompletableFuture httpResponse = new CompletableFuture<>(); +// httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) +// .whenComplete((response, throwable) -> { +// if (throwable != null) { +// httpResponse.completeExceptionally(throwable); +// return; +// } +// httpResponse.complete(processingResponse(response)); +// }); +// +// return httpResponse; +// } catch (InterruptedException e) { +// Thread.currentThread().interrupt(); +// return sendException(e); +// } catch (ExecutionException | TimeoutException e) { +// return sendException(e); +// } + } - Response response = new Response(statusCode, httpResponse.body()); - long timestamp = httpRequest.headers() - .firstValueAsLong(Constants.HTTP_TIMESTAMP_HEADER).orElse(0); - response.addHeader(Constants.NIO_TIMESTAMP_HEADER + timestamp); - return response; + private void checkingTimeout(CompletableFuture requestFuture) { + ScheduledExecutorService timeoutChecker = Executors.newSingleThreadScheduledExecutor(); + timeoutChecker.schedule(() -> { + if (!requestFuture.isDone()) { + requestFuture.complete(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); } - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - return sendException(e); - } catch (ExecutionException | TimeoutException e) { - return sendException(e); + }, Constants.REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); + } + + private Response processingResponse(HttpResponse response) { + String statusCode = Constants.HTTP_CODE.getOrDefault(response.statusCode(), null); + if (statusCode == null) { + return new Response(Response.INTERNAL_ERROR, response.body()); + } else { + Response newResponse = new Response(statusCode, response.body()); + long timestamp = response.headers() + .firstValueAsLong(Constants.HTTP_TIMESTAMP_HEADER).orElse(0); + newResponse.addHeader(Constants.NIO_TIMESTAMP_HEADER + timestamp); + return newResponse; } } - private List sendProxyRequests(Map httpRequests, List nodeUrls) { - List responses = new ArrayList<>(); + private List> sendProxyRequests(Map httpRequests, + List nodeUrls) { + List> responses = new ArrayList<>(); for (String nodeUrl : nodeUrls) { HttpRequest httpRequest = httpRequests.get(nodeUrl); if (!Objects.equals(selfUrl, nodeUrl)) { @@ -204,7 +233,8 @@ private List sendProxyRequests(Map httpRequests, return responses; } - private Response handleProxyRequest(Request request, HttpSession session, String paramId, int from, int ack) { + private CompletableFuture handleProxyRequest(Request request, HttpSession session, + String paramId, int from, int ack) { List nodeUrls = consistentHashing.getNodes(paramId, clusterUrls, from); if (nodeUrls.size() < from) { @@ -216,31 +246,48 @@ private Response handleProxyRequest(Request request, HttpSession session, String httpRequests.put(nodeUrl, createProxyRequest(request, nodeUrl, paramId)); } - List responses = sendProxyRequests(httpRequests, nodeUrls); + List> responses = sendProxyRequests(httpRequests, nodeUrls); if (httpRequests.get(selfUrl) != null) { - responses.add(requestHandler.handle(request, paramId)); + final CompletableFuture httpResponse = new CompletableFuture<>(); + try { + httpResponse.complete(requestHandler.handle(request, paramId)); + } catch (Exception e) { + httpResponse.completeExceptionally(e); + } + responses.add(httpResponse); } List successResponses = new ArrayList<>(); - for (Response response : responses) { - if (response.getStatus() < 500) { - successResponses.add(response); - } - } + CompletableFuture result = new CompletableFuture<>(); + AtomicInteger successResponseCount = new AtomicInteger(ack); + AtomicInteger errorResponseCount = new AtomicInteger(from - ack + 1); + + for (CompletableFuture responseFuture : responses) { + responseFuture.whenComplete((response, throwable) -> { + if (response.getStatus() < Constants.SERVER_ERROR && throwable == null) { + successResponseCount.decrementAndGet(); + successResponses.add(response); + } else { + errorResponseCount.decrementAndGet(); + } - if (successResponses.size() >= ack) { - if (request.getMethod() == Request.METHOD_GET) { - successResponses.sort(Comparator.comparingLong(r -> { + if (successResponseCount.get() == 0) { + if (request.getMethod() == Request.METHOD_GET) { + successResponses.sort(Comparator.comparingLong(r -> { String timestamp = r.getHeader(Constants.NIO_TIMESTAMP_HEADER); return timestamp == null ? 0 : Long.parseLong(timestamp); })); - return successResponses.getFirst(); - } else { - return successResponses.getLast(); - } - } else { - return new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY); + result.complete(successResponses.getFirst()); + } else { + result.complete(successResponses.getLast()); + } + } else if (errorResponseCount.get() == 0) { + result.complete(new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY)); + } + }); } + + return result; } } From f69d0731e41596b4736c8088b75cd37d90af0eb5 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Tue, 9 Apr 2024 21:29:49 +0300 Subject: [PATCH 45/60] Add solution --- src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 2c72a7d4c..a7a86642b 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -200,8 +200,8 @@ private CompletableFuture sendProxyRequest(HttpRequest httpRequest) { } private void checkingTimeout(CompletableFuture requestFuture) { - ScheduledExecutorService timeoutChecker = Executors.newSingleThreadScheduledExecutor(); - timeoutChecker.schedule(() -> { + ScheduledExecutorService checkingTimeout = Executors.newSingleThreadScheduledExecutor(); + checkingTimeout.schedule(() -> { if (!requestFuture.isDone()) { requestFuture.complete(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); } From 56e2a5d9d02e2519a4a26d141c1d20b59e912199 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Tue, 9 Apr 2024 22:08:03 +0300 Subject: [PATCH 46/60] Fix solution --- .../itmo/test/tuzikovalexandr/ServerImpl.java | 52 ++++++------------- 1 file changed, 16 insertions(+), 36 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index a7a86642b..2f27d5fb6 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -23,7 +23,12 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class ServerImpl extends HttpServer { @@ -33,6 +38,7 @@ public class ServerImpl extends HttpServer { private final ConsistentHashing consistentHashing; private final List clusterUrls; private final RequestHandler requestHandler; + private final ScheduledExecutorService checkingTimeout = Executors.newSingleThreadScheduledExecutor(); private static final Logger log = LoggerFactory.getLogger(ServerImpl.class); private final String selfUrl; @@ -139,16 +145,6 @@ private void processingRequest(Request request, HttpSession session, long proces } } -// private Response sendException(Exception exception) { -// String responseCode; -// if (exception.getClass().equals(TimeoutException.class)) { -// responseCode = Response.REQUEST_TIMEOUT; -// } else { -// responseCode = Response.INTERNAL_ERROR; -// } -// return new Response(responseCode, Response.EMPTY); -// } - private void sendResponse(HttpSession session, Response response) { try { session.sendResponse(response); @@ -179,28 +175,10 @@ private CompletableFuture sendProxyRequest(HttpRequest httpRequest) { }); return httpResponse; -// try { -// final CompletableFuture httpResponse = new CompletableFuture<>(); -// httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) -// .whenComplete((response, throwable) -> { -// if (throwable != null) { -// httpResponse.completeExceptionally(throwable); -// return; -// } -// httpResponse.complete(processingResponse(response)); -// }); -// -// return httpResponse; -// } catch (InterruptedException e) { -// Thread.currentThread().interrupt(); -// return sendException(e); -// } catch (ExecutionException | TimeoutException e) { -// return sendException(e); -// } } private void checkingTimeout(CompletableFuture requestFuture) { - ScheduledExecutorService checkingTimeout = Executors.newSingleThreadScheduledExecutor(); + checkingTimeout.schedule(() -> { if (!requestFuture.isDone()) { requestFuture.complete(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); @@ -250,11 +228,13 @@ private CompletableFuture handleProxyRequest(Request request, HttpSess if (httpRequests.get(selfUrl) != null) { final CompletableFuture httpResponse = new CompletableFuture<>(); - try { - httpResponse.complete(requestHandler.handle(request, paramId)); - } catch (Exception e) { - httpResponse.completeExceptionally(e); - } + executorService.execute(() -> { + try { + httpResponse.complete(requestHandler.handle(request, paramId)); + } catch (Exception e) { + httpResponse.completeExceptionally(e); + } + }); responses.add(httpResponse); } @@ -265,7 +245,7 @@ private CompletableFuture handleProxyRequest(Request request, HttpSess for (CompletableFuture responseFuture : responses) { responseFuture.whenComplete((response, throwable) -> { - if (response.getStatus() < Constants.SERVER_ERROR && throwable == null) { + if (throwable == null || response != null && response.getStatus() < Constants.SERVER_ERROR) { successResponseCount.decrementAndGet(); successResponses.add(response); } else { From f583d82f6b56fb4d8523e910e02b9a962b622a22 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Tue, 9 Apr 2024 22:13:39 +0300 Subject: [PATCH 47/60] Fix solution --- src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java index df8cdb7da..0415227bc 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServiceImpl.java @@ -48,7 +48,7 @@ public synchronized CompletableFuture stop() throws IOException { return CompletableFuture.completedFuture(null); } - @ServiceFactory(stage = 4) + @ServiceFactory(stage = 5) public static class Factory implements ServiceFactory.Factory { @Override From 5aaa874d360a979283b47031204241d3894f365d Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Tue, 9 Apr 2024 23:00:45 +0300 Subject: [PATCH 48/60] Fix solution --- .../itmo/test/tuzikovalexandr/ServerImpl.java | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 2f27d5fb6..9c5859e22 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -23,12 +23,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executors; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; public class ServerImpl extends HttpServer { @@ -130,7 +125,8 @@ private void processingRequest(Request request, HttpSession session, long proces if (request.getHeader(Constants.HTTP_TERMINATION_HEADER) == null) { CompletableFuture handleProxyResponse = handleProxyRequest(request, session, paramId, from, ack); - handleProxyResponse.whenComplete((response, throwable) -> sendResponse(session, response)); + handleProxyResponse = handleProxyResponse.whenComplete((response, throwable) -> + sendResponse(session, response)); checkingTimeout(handleProxyResponse); } else { sendResponse(session, requestHandler.handle(request, paramId)); @@ -165,6 +161,7 @@ private HttpRequest createProxyRequest(Request request, String nodeUrl, String p private CompletableFuture sendProxyRequest(HttpRequest httpRequest) { final CompletableFuture httpResponse = new CompletableFuture<>(); + CompletableFuture> byteResponse = httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) .whenComplete((response, throwable) -> { if (throwable != null) { @@ -174,16 +171,18 @@ private CompletableFuture sendProxyRequest(HttpRequest httpRequest) { httpResponse.complete(processingResponse(response)); }); + checkCompletableFuture(byteResponse); return httpResponse; } private void checkingTimeout(CompletableFuture requestFuture) { - - checkingTimeout.schedule(() -> { + ScheduledFuture future = checkingTimeout.schedule(() -> { if (!requestFuture.isDone()) { requestFuture.complete(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); } }, Constants.REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); + + checkCompletableFuture(future); } private Response processingResponse(HttpResponse response) { @@ -244,8 +243,8 @@ private CompletableFuture handleProxyRequest(Request request, HttpSess AtomicInteger errorResponseCount = new AtomicInteger(from - ack + 1); for (CompletableFuture responseFuture : responses) { - responseFuture.whenComplete((response, throwable) -> { - if (throwable == null || response != null && response.getStatus() < Constants.SERVER_ERROR) { + responseFuture = responseFuture.whenComplete((response, throwable) -> { + if (throwable == null || (response != null && response.getStatus() < Constants.SERVER_ERROR)) { successResponseCount.decrementAndGet(); successResponses.add(response); } else { @@ -266,8 +265,22 @@ private CompletableFuture handleProxyRequest(Request request, HttpSess result.complete(new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY)); } }); + + checkCompletableFuture(responseFuture); } return result; } + + private void checkCompletableFuture(CompletableFuture completableFuture) { + if (completableFuture == null) { + log.error("Error CompletableFuture"); + } + } + + private void checkCompletableFuture(ScheduledFuture scheduledFuture) { + if (scheduledFuture == null) { + log.error("Error ScheduledFuture"); + } + } } From bca9871550bb6ab623da6d0c4971d0ea503abe2c Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Tue, 9 Apr 2024 23:19:38 +0300 Subject: [PATCH 49/60] Fix solution --- .../ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 9c5859e22..e3ebd4f9e 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -23,7 +23,13 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class ServerImpl extends HttpServer { @@ -237,6 +243,11 @@ private CompletableFuture handleProxyRequest(Request request, HttpSess responses.add(httpResponse); } + return getQuorumResult(request, from, ack, responses); + } + + private CompletableFuture getQuorumResult(Request request, int from, int ack, + List> responses) { List successResponses = new ArrayList<>(); CompletableFuture result = new CompletableFuture<>(); AtomicInteger successResponseCount = new AtomicInteger(ack); From dbd1e8d09cf606f7dbfcb59849907ca5f22f185b Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 10 Apr 2024 14:00:30 +0300 Subject: [PATCH 50/60] Fix solution --- .../itmo/test/tuzikovalexandr/ServerImpl.java | 40 +++++-------------- 1 file changed, 10 insertions(+), 30 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index e3ebd4f9e..1c7c8d094 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -24,12 +24,9 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class ServerImpl extends HttpServer { @@ -39,7 +36,6 @@ public class ServerImpl extends HttpServer { private final ConsistentHashing consistentHashing; private final List clusterUrls; private final RequestHandler requestHandler; - private final ScheduledExecutorService checkingTimeout = Executors.newSingleThreadScheduledExecutor(); private static final Logger log = LoggerFactory.getLogger(ServerImpl.class); private final String selfUrl; @@ -133,7 +129,7 @@ private void processingRequest(Request request, HttpSession session, long proces handleProxyRequest(request, session, paramId, from, ack); handleProxyResponse = handleProxyResponse.whenComplete((response, throwable) -> sendResponse(session, response)); - checkingTimeout(handleProxyResponse); + checkCompletableFuture(handleProxyResponse); } else { sendResponse(session, requestHandler.handle(request, paramId)); } @@ -181,16 +177,6 @@ private CompletableFuture sendProxyRequest(HttpRequest httpRequest) { return httpResponse; } - private void checkingTimeout(CompletableFuture requestFuture) { - ScheduledFuture future = checkingTimeout.schedule(() -> { - if (!requestFuture.isDone()) { - requestFuture.complete(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); - } - }, Constants.REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); - - checkCompletableFuture(future); - } - private Response processingResponse(HttpResponse response) { String statusCode = Constants.HTTP_CODE.getOrDefault(response.statusCode(), null); if (statusCode == null) { @@ -250,29 +236,29 @@ private CompletableFuture getQuorumResult(Request request, int from, i List> responses) { List successResponses = new ArrayList<>(); CompletableFuture result = new CompletableFuture<>(); - AtomicInteger successResponseCount = new AtomicInteger(ack); - AtomicInteger errorResponseCount = new AtomicInteger(from - ack + 1); + AtomicInteger successResponseCount = new AtomicInteger(0); + AtomicInteger errorResponseCount = new AtomicInteger(0); for (CompletableFuture responseFuture : responses) { responseFuture = responseFuture.whenComplete((response, throwable) -> { if (throwable == null || (response != null && response.getStatus() < Constants.SERVER_ERROR)) { - successResponseCount.decrementAndGet(); + successResponseCount.incrementAndGet(); successResponses.add(response); } else { - errorResponseCount.decrementAndGet(); + errorResponseCount.incrementAndGet(); } - if (successResponseCount.get() == 0) { + if (successResponseCount.get() == ack) { if (request.getMethod() == Request.METHOD_GET) { successResponses.sort(Comparator.comparingLong(r -> { String timestamp = r.getHeader(Constants.NIO_TIMESTAMP_HEADER); return timestamp == null ? 0 : Long.parseLong(timestamp); })); - result.complete(successResponses.getFirst()); - } else { result.complete(successResponses.getLast()); + } else { + result.complete(successResponses.getFirst()); } - } else if (errorResponseCount.get() == 0) { + } else if (errorResponseCount.get() == from - ack + 1) { result.complete(new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY)); } }); @@ -288,10 +274,4 @@ private void checkCompletableFuture(CompletableFuture completableFuture) { log.error("Error CompletableFuture"); } } - - private void checkCompletableFuture(ScheduledFuture scheduledFuture) { - if (scheduledFuture == null) { - log.error("Error ScheduledFuture"); - } - } } From 7f33f757ad5bacfc99b461836cae8bbe1d23ceb5 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 10 Apr 2024 15:22:54 +0300 Subject: [PATCH 51/60] Fix solution --- .../itmo/test/tuzikovalexandr/ServerImpl.java | 43 +++++++------------ 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 1c7c8d094..346ab4b1e 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -85,19 +85,13 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti } String paramId = request.getParameter("id="); - - if (paramId == null || paramId.isEmpty()) { - sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); - return; - } - String fromStr = request.getParameter("from="); String ackStr = request.getParameter("ack="); int from = fromStr == null || fromStr.isEmpty() ? clusterSize : Integer.parseInt(fromStr); int ack = ackStr == null || ackStr.isEmpty() ? from / 2 + 1 : Integer.parseInt(ackStr); - if (ack == 0 || from > clusterSize || ack > from) { + if (ack == 0 || from > clusterSize || ack > from || paramId == null || paramId.isEmpty()) { sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); return; } @@ -162,19 +156,8 @@ private HttpRequest createProxyRequest(Request request, String nodeUrl, String p } private CompletableFuture sendProxyRequest(HttpRequest httpRequest) { - final CompletableFuture httpResponse = new CompletableFuture<>(); - CompletableFuture> byteResponse = - httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) - .whenComplete((response, throwable) -> { - if (throwable != null) { - httpResponse.completeExceptionally(throwable); - return; - } - httpResponse.complete(processingResponse(response)); - }); - - checkCompletableFuture(byteResponse); - return httpResponse; + return httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) + .thenApplyAsync(this::processingResponse); } private Response processingResponse(HttpResponse response) { @@ -236,8 +219,8 @@ private CompletableFuture getQuorumResult(Request request, int from, i List> responses) { List successResponses = new ArrayList<>(); CompletableFuture result = new CompletableFuture<>(); - AtomicInteger successResponseCount = new AtomicInteger(0); - AtomicInteger errorResponseCount = new AtomicInteger(0); + AtomicInteger successResponseCount = new AtomicInteger(); + AtomicInteger errorResponseCount = new AtomicInteger(); for (CompletableFuture responseFuture : responses) { responseFuture = responseFuture.whenComplete((response, throwable) -> { @@ -250,15 +233,14 @@ private CompletableFuture getQuorumResult(Request request, int from, i if (successResponseCount.get() == ack) { if (request.getMethod() == Request.METHOD_GET) { - successResponses.sort(Comparator.comparingLong(r -> { - String timestamp = r.getHeader(Constants.NIO_TIMESTAMP_HEADER); - return timestamp == null ? 0 : Long.parseLong(timestamp); - })); + sortResponses(successResponses); result.complete(successResponses.getLast()); } else { result.complete(successResponses.getFirst()); } - } else if (errorResponseCount.get() == from - ack + 1) { + } + + if (errorResponseCount.get() == from - ack + 1) { result.complete(new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY)); } }); @@ -269,6 +251,13 @@ private CompletableFuture getQuorumResult(Request request, int from, i return result; } + private void sortResponses(List successResponses) { + successResponses.sort(Comparator.comparingLong(r -> { + String timestamp = r.getHeader(Constants.NIO_TIMESTAMP_HEADER); + return timestamp == null ? 0 : Long.parseLong(timestamp); + })); + } + private void checkCompletableFuture(CompletableFuture completableFuture) { if (completableFuture == null) { log.error("Error CompletableFuture"); From fd54b14bd658b59ec4b07ff74a5765760cd7f15c Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 10 Apr 2024 15:37:57 +0300 Subject: [PATCH 52/60] Fix solution --- .../itmo/test/tuzikovalexandr/ServerImpl.java | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 346ab4b1e..d7662d275 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -201,15 +201,9 @@ private CompletableFuture handleProxyRequest(Request request, HttpSess List> responses = sendProxyRequests(httpRequests, nodeUrls); if (httpRequests.get(selfUrl) != null) { - final CompletableFuture httpResponse = new CompletableFuture<>(); - executorService.execute(() -> { - try { - httpResponse.complete(requestHandler.handle(request, paramId)); - } catch (Exception e) { - httpResponse.completeExceptionally(e); - } - }); - responses.add(httpResponse); + responses.add( + CompletableFuture.supplyAsync(() -> requestHandler.handle(request, paramId)) + ); } return getQuorumResult(request, from, ack, responses); @@ -232,12 +226,7 @@ private CompletableFuture getQuorumResult(Request request, int from, i } if (successResponseCount.get() == ack) { - if (request.getMethod() == Request.METHOD_GET) { - sortResponses(successResponses); - result.complete(successResponses.getLast()); - } else { - result.complete(successResponses.getFirst()); - } + result.complete(getResult(request, successResponses)); } if (errorResponseCount.get() == from - ack + 1) { @@ -251,6 +240,15 @@ private CompletableFuture getQuorumResult(Request request, int from, i return result; } + private Response getResult(Request request, List successResponses) { + if (request.getMethod() == Request.METHOD_GET) { + sortResponses(successResponses); + return successResponses.getLast(); + } else { + return successResponses.getFirst(); + } + } + private void sortResponses(List successResponses) { successResponses.sort(Comparator.comparingLong(r -> { String timestamp = r.getHeader(Constants.NIO_TIMESTAMP_HEADER); From 9a32617b1bf95fe7550e18e56e628d9be03f2534 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 10 Apr 2024 16:26:29 +0300 Subject: [PATCH 53/60] Fix solution --- .../tuzikovalexandr/ConsistentHashing.java | 50 +++++++++++++++---- .../itmo/test/tuzikovalexandr/Constants.java | 2 +- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index 7d0cc0166..888fe2a0d 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -2,20 +2,16 @@ import one.nio.util.Hash; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.NavigableMap; -import java.util.SortedMap; -import java.util.TreeMap; +import java.util.*; import java.util.stream.Collectors; public class ConsistentHashing { private final NavigableMap circle; + private final int clusterSize; public ConsistentHashing(List clusterUrls, int numbOfVirtualNodes) { circle = new TreeMap<>(); - + clusterSize = clusterUrls.size(); for (String clusterUrl : clusterUrls) { for (int i = 0; i < numbOfVirtualNodes; i++) { addNode(i, clusterUrl); @@ -43,10 +39,22 @@ public List getNodes(String key, int from) { return new ArrayList<>(); } - final int hash = getHash(key); - SortedMap tailMap = circle.tailMap(hash); - return (tailMap.isEmpty() ? circle : tailMap).values() - .stream().limit(from).collect(Collectors.toList()); + List res = new ArrayList<>(); + + if (key != null && from > 0) { + if (from < clusterSize) { + int slot = getHash(key); + Iterator it = new ClockwiseIterator(slot); + while (it.hasNext() && res.size() < from) { + String part = it.next(); + res.add(part); + } + } else { + res.addAll(circle.values()); + } + } + + return res; } List getNodes(String key, List clusterUrls, int from) { @@ -63,4 +71,24 @@ List getNodes(String key, List clusterUrls, int from) { private int getHash(String key) { return Hash.murmur3(key); } + + private class ClockwiseIterator implements Iterator { + private final Iterator head; + private final Iterator tail; + + public ClockwiseIterator(int slot) { + this.head = circle.headMap(slot).values().iterator(); + this.tail = circle.tailMap(slot).values().iterator(); + } + + @Override + public boolean hasNext() { + return head.hasNext() || tail.hasNext(); + } + + @Override + public String next() { + return tail.hasNext() ? tail.next() : head.next(); + } + } } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java index c3d2689f1..530da3bfd 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java @@ -26,7 +26,7 @@ public final class Constants { public static final String BASE_URL = "http://localhost"; public static final int BASE_PORT = 8080; public static final long FLUSHING_THRESHOLD_BYTES = 1024 * 1024; - public static final int NUMBER_OF_VIRTUAL_NODES = 5; + public static final int NUMBER_OF_VIRTUAL_NODES = 50; public static final String HTTP_TIMESTAMP_HEADER = "X-Timestamp"; public static final String NIO_TIMESTAMP_HEADER = "x-timestamp:"; public static final String HTTP_TERMINATION_HEADER = "X-Termination"; From 37a2fbd2e45ebecb17f72ae77534a984e763ca48 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 10 Apr 2024 16:30:36 +0300 Subject: [PATCH 54/60] Fix solution --- .../vk/itmo/test/tuzikovalexandr/ConsistentHashing.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index 888fe2a0d..0ccd04535 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -2,7 +2,13 @@ import one.nio.util.Hash; -import java.util.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.NavigableMap; +import java.util.SortedMap; +import java.util.TreeMap; import java.util.stream.Collectors; public class ConsistentHashing { From ba4137aa812d592ffc910cbae55e5e65883912b8 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 11 Apr 2024 15:00:38 +0300 Subject: [PATCH 55/60] Fix solution --- .../itmo/test/tuzikovalexandr/ServerImpl.java | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index d7662d275..490d191ef 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.ExecutionException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -119,11 +120,7 @@ private void processingRequest(Request request, HttpSession session, long proces try { if (request.getHeader(Constants.HTTP_TERMINATION_HEADER) == null) { - CompletableFuture handleProxyResponse = - handleProxyRequest(request, session, paramId, from, ack); - handleProxyResponse = handleProxyResponse.whenComplete((response, throwable) -> - sendResponse(session, response)); - checkCompletableFuture(handleProxyResponse); + sendResponse(session, handleProxyRequest(request, session, paramId, from, ack)); } else { sendResponse(session, requestHandler.handle(request, paramId)); } @@ -185,7 +182,7 @@ private List> sendProxyRequests(Map handleProxyRequest(Request request, HttpSession session, + private Response handleProxyRequest(Request request, HttpSession session, String paramId, int from, int ack) { List nodeUrls = consistentHashing.getNodes(paramId, clusterUrls, from); @@ -209,7 +206,7 @@ private CompletableFuture handleProxyRequest(Request request, HttpSess return getQuorumResult(request, from, ack, responses); } - private CompletableFuture getQuorumResult(Request request, int from, int ack, + private Response getQuorumResult(Request request, int from, int ack, List> responses) { List successResponses = new ArrayList<>(); CompletableFuture result = new CompletableFuture<>(); @@ -217,7 +214,7 @@ private CompletableFuture getQuorumResult(Request request, int from, i AtomicInteger errorResponseCount = new AtomicInteger(); for (CompletableFuture responseFuture : responses) { - responseFuture = responseFuture.whenComplete((response, throwable) -> { + responseFuture.whenCompleteAsync((response, throwable) -> { if (throwable == null || (response != null && response.getStatus() < Constants.SERVER_ERROR)) { successResponseCount.incrementAndGet(); successResponses.add(response); @@ -232,12 +229,14 @@ private CompletableFuture getQuorumResult(Request request, int from, i if (errorResponseCount.get() == from - ack + 1) { result.complete(new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY)); } - }); - - checkCompletableFuture(responseFuture); + }).exceptionally(e -> new Response(Response.INTERNAL_ERROR, Response.EMPTY)); } - return result; + try { + return result.get(); + } catch (InterruptedException | ExecutionException e) { + return new Response(Response.INTERNAL_ERROR, Response.EMPTY); + } } private Response getResult(Request request, List successResponses) { @@ -255,10 +254,4 @@ private void sortResponses(List successResponses) { return timestamp == null ? 0 : Long.parseLong(timestamp); })); } - - private void checkCompletableFuture(CompletableFuture completableFuture) { - if (completableFuture == null) { - log.error("Error CompletableFuture"); - } - } } From 26955581bf1753132c9978509f34b6c7857ac93a Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 11 Apr 2024 15:05:48 +0300 Subject: [PATCH 56/60] Fix solution --- .../java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 490d191ef..c2bff62f7 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -23,8 +23,8 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.ExecutionException; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; @@ -234,7 +234,10 @@ private Response getQuorumResult(Request request, int from, int ack, try { return result.get(); - } catch (InterruptedException | ExecutionException e) { + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return new Response(Response.INTERNAL_ERROR, Response.EMPTY); + } catch (ExecutionException e) { return new Response(Response.INTERNAL_ERROR, Response.EMPTY); } } From 7437f7ee6f6c10850be573fb7af9755e22629412 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 11 Apr 2024 15:52:04 +0300 Subject: [PATCH 57/60] Fix solution --- .../tuzikovalexandr/ConsistentHashing.java | 25 +++---------------- .../itmo/test/tuzikovalexandr/ServerImpl.java | 12 +++------ 2 files changed, 7 insertions(+), 30 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java index 0ccd04535..e2d1ee9fc 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ConsistentHashing.java @@ -5,19 +5,17 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.NavigableMap; import java.util.SortedMap; import java.util.TreeMap; -import java.util.stream.Collectors; public class ConsistentHashing { private final NavigableMap circle; - private final int clusterSize; + private final List clusterUrls; public ConsistentHashing(List clusterUrls, int numbOfVirtualNodes) { circle = new TreeMap<>(); - clusterSize = clusterUrls.size(); + this.clusterUrls = clusterUrls; for (String clusterUrl : clusterUrls) { for (int i = 0; i < numbOfVirtualNodes; i++) { addNode(i, clusterUrl); @@ -41,14 +39,10 @@ public String getNode(String key) { } public List getNodes(String key, int from) { - if (circle.isEmpty()) { - return new ArrayList<>(); - } - List res = new ArrayList<>(); if (key != null && from > 0) { - if (from < clusterSize) { + if (from < clusterUrls.size()) { int slot = getHash(key); Iterator it = new ClockwiseIterator(slot); while (it.hasNext() && res.size() < from) { @@ -56,24 +50,13 @@ public List getNodes(String key, int from) { res.add(part); } } else { - res.addAll(circle.values()); + res.addAll(clusterUrls); } } return res; } - List getNodes(String key, List clusterUrls, int from) { - Map nodesHashes = new TreeMap<>(); - - for (String nodeUrl : clusterUrls) { - nodesHashes.put(Hash.murmur3(nodeUrl + key), nodeUrl); - } - - return nodesHashes.values().stream().limit(from) - .collect(Collectors.toList()); - } - private int getHash(String key) { return Hash.murmur3(key); } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index c2bff62f7..12f92aeca 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -23,11 +23,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; public class ServerImpl extends HttpServer { @@ -35,7 +31,6 @@ public class ServerImpl extends HttpServer { private final ExecutorService executorService; private final HttpClient httpClient; private final ConsistentHashing consistentHashing; - private final List clusterUrls; private final RequestHandler requestHandler; private static final Logger log = LoggerFactory.getLogger(ServerImpl.class); @@ -49,7 +44,6 @@ public ServerImpl(ServiceConfig config, Dao dao, Worker worker, this.consistentHashing = consistentHashing; this.selfUrl = config.selfUrl(); this.clusterSize = config.clusterUrls().size(); - this.clusterUrls = config.clusterUrls(); this.requestHandler = new RequestHandler(dao); this.httpClient = HttpClient.newBuilder() .executor(Executors.newFixedThreadPool(2)).build(); @@ -184,7 +178,7 @@ private List> sendProxyRequests(Map nodeUrls = consistentHashing.getNodes(paramId, clusterUrls, from); + List nodeUrls = consistentHashing.getNodes(paramId, from); if (nodeUrls.size() < from) { sendResponse(session, new Response(Constants.NOT_ENOUGH_REPLICAS, Response.EMPTY)); @@ -208,7 +202,7 @@ private Response handleProxyRequest(Request request, HttpSession session, private Response getQuorumResult(Request request, int from, int ack, List> responses) { - List successResponses = new ArrayList<>(); + List successResponses = new CopyOnWriteArrayList<>(); CompletableFuture result = new CompletableFuture<>(); AtomicInteger successResponseCount = new AtomicInteger(); AtomicInteger errorResponseCount = new AtomicInteger(); From 1a8e41d93986c82c2563573971d6e3de716d1b91 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Thu, 11 Apr 2024 15:56:02 +0300 Subject: [PATCH 58/60] Fix solution --- .../java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 12f92aeca..6846cfd74 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -23,7 +23,12 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.atomic.AtomicInteger; public class ServerImpl extends HttpServer { From 4207e956855c0be6026bbb65144bc81766200b10 Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 17 Apr 2024 14:03:40 +0300 Subject: [PATCH 59/60] Add report --- .../itmo/test/tuzikovalexandr/Constants.java | 4 +- .../itmo/test/tuzikovalexandr/ServerImpl.java | 5 +- .../stage5/get-profile-1th-2con-5000.txt | 81 + .../results/stage5/get-profile-1th-alloc.html | 2718 ++++++++ .../results/stage5/get-profile-1th-cpu.html | 5374 ++++++++++++++++ .../results/stage5/get-profile-1th-lock.html | 968 +++ .../stage5/put-profile-1th-2con-10000.txt | 78 + .../stage5/put-profile-1th-2con-5000.txt | 94 + .../results/stage5/put-profile-1th-alloc.html | 2860 +++++++++ .../results/stage5/put-profile-1th-cpu.html | 5573 +++++++++++++++++ .../results/stage5/put-profile-1th-lock.html | 897 +++ .../tuzikovalexandr/results/stage5/report.md | 65 + 12 files changed, 18712 insertions(+), 5 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-2con-5000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-2con-10000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-2con-5000.txt create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/report.md diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java index 530da3bfd..b4ad3b645 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/Constants.java @@ -14,7 +14,7 @@ public final class Constants { public static final String TOO_MANY_REQUESTS = "429 Too Many Requests"; public static final String NOT_ENOUGH_REPLICAS = "504 Not Enough Replicas"; public static final int SERVER_ERROR = 500; - public static final int REQUEST_TIMEOUT = 300; + public static final int REQUEST_TIMEOUT = 500; public static final Map HTTP_CODE = Map.of( HttpURLConnection.HTTP_OK, Response.OK, HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, @@ -26,7 +26,7 @@ public final class Constants { public static final String BASE_URL = "http://localhost"; public static final int BASE_PORT = 8080; public static final long FLUSHING_THRESHOLD_BYTES = 1024 * 1024; - public static final int NUMBER_OF_VIRTUAL_NODES = 50; + public static final int NUMBER_OF_VIRTUAL_NODES = 100; public static final String HTTP_TIMESTAMP_HEADER = "X-Timestamp"; public static final String NIO_TIMESTAMP_HEADER = "x-timestamp:"; public static final String HTTP_TERMINATION_HEADER = "X-Termination"; diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java index 6846cfd74..ac0216c82 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/ServerImpl.java @@ -27,7 +27,6 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.atomic.AtomicInteger; @@ -51,7 +50,7 @@ public ServerImpl(ServiceConfig config, Dao dao, Worker worker, this.clusterSize = config.clusterUrls().size(); this.requestHandler = new RequestHandler(dao); this.httpClient = HttpClient.newBuilder() - .executor(Executors.newFixedThreadPool(2)).build(); + .executor(worker.getExecutorService()).build(); } private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { @@ -221,7 +220,7 @@ private Response getQuorumResult(Request request, int from, int ack, errorResponseCount.incrementAndGet(); } - if (successResponseCount.get() == ack) { + if (successResponseCount.get() >= ack) { result.complete(getResult(request, successResponses)); } diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-2con-5000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-2con-5000.txt new file mode 100644 index 000000000..6a4168432 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-2con-5000.txt @@ -0,0 +1,81 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 2 connections + Thread calibration: mean lat.: 4858.425ms, rate sampling interval: 16023ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 15.58s 4.60s 26.33s 66.12% + Req/Sec 629.00 0.00 629.00 100.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 14.93s + 75.000% 17.96s + 90.000% 23.90s + 99.000% 26.10s + 99.900% 26.33s + 99.990% 26.35s + 99.999% 26.35s +100.000% 26.35s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 8650.751 0.000000 1 1.00 + 9986.047 0.100000 1156 1.11 + 11280.383 0.200000 2299 1.25 + 12689.407 0.300000 3448 1.43 + 13803.519 0.400000 4603 1.67 + 14925.823 0.500000 5756 2.00 + 15474.687 0.550000 6328 2.22 + 16072.703 0.600000 6899 2.50 + 16637.951 0.650000 7470 2.86 + 17399.807 0.700000 8053 3.33 + 17956.863 0.750000 8624 4.00 + 18300.927 0.775000 8920 4.44 + 18595.839 0.800000 9203 5.00 + 19333.119 0.825000 9483 5.71 + 20889.599 0.850000 9769 6.67 + 22429.695 0.875000 10068 8.00 + 23363.583 0.887500 10200 8.89 + 23904.255 0.900000 10343 10.00 + 24133.631 0.912500 10489 11.43 + 24412.159 0.925000 10633 13.33 + 24625.151 0.937500 10784 16.00 + 24723.455 0.943750 10847 17.78 + 24788.991 0.950000 10925 20.00 + 24854.527 0.956250 10990 22.86 + 25280.511 0.962500 11065 26.67 + 25624.575 0.968750 11137 32.00 + 25673.727 0.971875 11176 35.56 + 25755.647 0.975000 11214 40.00 + 25788.415 0.978125 11261 45.71 + 25804.799 0.981250 11279 53.33 + 26034.175 0.984375 11322 64.00 + 26050.559 0.985938 11340 71.11 + 26066.943 0.987500 11357 80.00 + 26083.327 0.989062 11376 91.43 + 26132.479 0.990625 11386 106.67 + 26198.015 0.992188 11405 128.00 + 26214.399 0.992969 11419 142.22 + 26230.783 0.993750 11438 160.00 + 26230.783 0.994531 11438 182.86 + 26247.167 0.995313 11452 213.33 + 26247.167 0.996094 11452 256.00 + 26247.167 0.996484 11452 284.44 + 26263.551 0.996875 11472 320.00 + 26263.551 0.997266 11472 365.71 + 26263.551 0.997656 11472 426.67 + 26263.551 0.998047 11472 512.00 + 26263.551 0.998242 11472 568.89 + 26279.935 0.998437 11477 640.00 + 26279.935 0.998633 11477 731.43 + 26296.319 0.998828 11479 853.33 + 26329.087 0.999023 11481 1024.00 + 26345.471 0.999121 11492 1137.78 + 26345.471 1.000000 11492 inf +#[Mean = 15575.994, StdDeviation = 4599.957] +#[Max = 26329.088, Total count = 11492] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 18280 requests in 30.00s, 1.46MB read + Socket errors: connect 0, read 48, write 0, timeout 0 + Non-2xx or 3xx responses: 15645 +Requests/sec: 609.33 +Transfer/sec: 49.89KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-alloc.html new file mode 100644 index 000000000..66f329f7d --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-alloc.html @@ -0,0 +1,2718 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-cpu.html new file mode 100644 index 000000000..72450c708 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-cpu.html @@ -0,0 +1,5374 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-lock.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-lock.html new file mode 100644 index 000000000..326f1004f --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/get-profile-1th-lock.html @@ -0,0 +1,968 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-2con-10000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-2con-10000.txt new file mode 100644 index 000000000..92af9a75f --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-2con-10000.txt @@ -0,0 +1,78 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 2 connections + Thread calibration: mean lat.: 5529.087ms, rate sampling interval: 17678ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 17.94s 5.63s 28.59s 57.21% + Req/Sec 463.00 0.00 463.00 100.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 16.18s + 75.000% 23.53s + 90.000% 25.76s + 99.000% 28.51s + 99.900% 28.59s + 99.990% 28.61s + 99.999% 28.61s +100.000% 28.61s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 9519.103 0.000000 2 1.00 + 10977.279 0.100000 901 1.11 + 12582.911 0.200000 1800 1.25 + 14041.087 0.300000 2698 1.43 + 15122.431 0.400000 3598 1.67 + 16179.199 0.500000 4497 2.00 + 17121.279 0.550000 4945 2.22 + 18808.831 0.600000 5394 2.50 + 20365.311 0.650000 5840 2.86 + 22134.783 0.700000 6291 3.33 + 23527.423 0.750000 6739 4.00 + 23871.487 0.775000 6974 4.44 + 24281.087 0.800000 7191 5.00 + 24657.919 0.825000 7416 5.71 + 24985.599 0.850000 7648 6.67 + 25395.199 0.875000 7863 8.00 + 25624.575 0.887500 7981 8.89 + 25755.647 0.900000 8098 10.00 + 26329.087 0.912500 8199 11.43 + 27099.135 0.925000 8320 13.33 + 27836.415 0.937500 8423 16.00 + 27901.951 0.943750 8485 17.78 + 27951.103 0.950000 8535 20.00 + 28016.639 0.956250 8593 22.86 + 28082.175 0.962500 8651 26.67 + 28229.631 0.968750 8714 32.00 + 28262.399 0.971875 8734 35.56 + 28311.551 0.975000 8769 40.00 + 28344.319 0.978125 8789 45.71 + 28426.239 0.981250 8823 53.33 + 28459.007 0.984375 8855 64.00 + 28475.391 0.985938 8872 71.11 + 28475.391 0.987500 8872 80.00 + 28491.775 0.989062 8888 91.43 + 28508.159 0.990625 8906 106.67 + 28524.543 0.992188 8919 128.00 + 28540.927 0.992969 8934 142.22 + 28540.927 0.993750 8934 160.00 + 28557.311 0.994531 8949 182.86 + 28557.311 0.995313 8949 213.33 + 28557.311 0.996094 8949 256.00 + 28573.695 0.996484 8964 284.44 + 28573.695 0.996875 8964 320.00 + 28573.695 0.997266 8964 365.71 + 28573.695 0.997656 8964 426.67 + 28590.079 0.998047 8975 512.00 + 28590.079 0.998242 8975 568.89 + 28590.079 0.998437 8975 640.00 + 28590.079 0.998633 8975 731.43 + 28590.079 0.998828 8975 853.33 + 28606.463 0.999023 8984 1024.00 + 28606.463 1.000000 8984 inf +#[Mean = 17942.594, StdDeviation = 5634.925] +#[Max = 28590.080, Total count = 8984] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 13929 requests in 30.03s, 0.89MB read +Requests/sec: 463.84 +Transfer/sec: 30.37KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-2con-5000.txt b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-2con-5000.txt new file mode 100644 index 000000000..683606a08 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-2con-5000.txt @@ -0,0 +1,94 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 2 connections + Thread calibration: mean lat.: 5196.393ms, rate sampling interval: 16498ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 17.34s 4.75s 25.53s 58.53% + Req/Sec 821.00 0.00 821.00 100.00% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 17.25s + 75.000% 21.48s + 90.000% 23.95s + 99.000% 25.41s + 99.900% 25.53s + 99.990% 25.53s + 99.999% 25.54s +100.000% 25.54s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 8855.551 0.000000 1 1.00 + 10756.095 0.100000 1654 1.11 + 12476.415 0.200000 3311 1.25 + 14114.815 0.300000 4963 1.43 + 15646.719 0.400000 6617 1.67 + 17252.351 0.500000 8275 2.00 + 18055.167 0.550000 9089 2.22 + 18989.055 0.600000 9925 2.50 + 19791.871 0.650000 10745 2.86 + 20676.607 0.700000 11574 3.33 + 21479.423 0.750000 12410 4.00 + 21921.791 0.775000 12818 4.44 + 22298.623 0.800000 13234 5.00 + 22757.375 0.825000 13637 5.71 + 23166.975 0.850000 14059 6.67 + 23511.039 0.875000 14479 8.00 + 23756.799 0.887500 14676 8.89 + 23953.407 0.900000 14878 10.00 + 24133.631 0.912500 15082 11.43 + 24346.623 0.925000 15303 13.33 + 24526.847 0.937500 15503 16.00 + 24657.919 0.943750 15600 17.78 + 24788.991 0.950000 15720 20.00 + 24854.527 0.956250 15819 22.86 + 24920.063 0.962500 15913 26.67 + 25001.983 0.968750 16012 32.00 + 25051.135 0.971875 16073 35.56 + 25165.823 0.975000 16115 40.00 + 25214.975 0.978125 16178 45.71 + 25247.743 0.981250 16219 53.33 + 25329.663 0.984375 16273 64.00 + 25346.047 0.985938 16295 71.11 + 25378.815 0.987500 16326 80.00 + 25411.583 0.989062 16363 91.43 + 25427.967 0.990625 16387 106.67 + 25444.351 0.992188 16414 128.00 + 25444.351 0.992969 16414 142.22 + 25460.735 0.993750 16437 160.00 + 25460.735 0.994531 16437 182.86 + 25477.119 0.995313 16462 213.33 + 25477.119 0.996094 16462 256.00 + 25493.503 0.996484 16484 284.44 + 25493.503 0.996875 16484 320.00 + 25493.503 0.997266 16484 365.71 + 25509.887 0.997656 16506 426.67 + 25509.887 0.998047 16506 512.00 + 25509.887 0.998242 16506 568.89 + 25509.887 0.998437 16506 640.00 + 25509.887 0.998633 16506 731.43 + 25509.887 0.998828 16506 853.33 + 25526.271 0.999023 16522 1024.00 + 25526.271 0.999121 16522 1137.78 + 25526.271 0.999219 16522 1280.00 + 25526.271 0.999316 16522 1462.86 + 25526.271 0.999414 16522 1706.67 + 25526.271 0.999512 16522 2048.00 + 25526.271 0.999561 16522 2275.56 + 25526.271 0.999609 16522 2560.00 + 25526.271 0.999658 16522 2925.71 + 25526.271 0.999707 16522 3413.33 + 25526.271 0.999756 16522 4096.00 + 25526.271 0.999780 16522 4551.11 + 25526.271 0.999805 16522 5120.00 + 25526.271 0.999829 16522 5851.43 + 25526.271 0.999854 16522 6826.67 + 25526.271 0.999878 16522 8192.00 + 25542.655 0.999890 16524 9102.22 + 25542.655 1.000000 16524 inf +#[Mean = 17336.704, StdDeviation = 4750.625] +#[Max = 25526.272, Total count = 16524] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 22297 requests in 30.00s, 1.43MB read +Requests/sec: 743.33 +Transfer/sec: 48.66KB diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-alloc.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-alloc.html new file mode 100644 index 000000000..3dc57ef27 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-alloc.html @@ -0,0 +1,2860 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-cpu.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-cpu.html new file mode 100644 index 000000000..cca7273ab --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-cpu.html @@ -0,0 +1,5573 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-lock.html b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-lock.html new file mode 100644 index 000000000..5955eb096 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/put-profile-1th-lock.html @@ -0,0 +1,897 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/report.md new file mode 100644 index 000000000..1e4fa8695 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/report.md @@ -0,0 +1,65 @@ +## Начальные сведения +* Виртуалке были даны 4 ядра (будем надеяться, что не помрет) +* Конфигурация кластера: 3 ноды +* Реплицирование по умолчанию (2/3) + +## PUT 5000 30s 1 thread 2 con + +Работающие входные данные остаются с прошлого этапа. Результаты эксперимента в сравнении с прошлым этапом при +1 поток, 2 соединение, 5000 запросов приведены ниже. [put-profile-1th-2con-5000.txt](put-profile-1th-2con-5000.txt) + +``` + было стало + 50.000% 5.12s 17.25s + 75.000% 7.24s 21.48s + 90.000% 7.24s 23.95s + 99.000% 8.55s 25.41s + 99.900% 9.33s 25.53s + 99.990% 9.33s 25.53s + 99.999% 9.33s 25.54s +100.000% 9.33s 25.54s +``` + +## CPU + +[put-profile-1th-cpu.html](put-profile-1th-cpu.html) + +## ALLOC + +[put-profile-1th-alloc.html](put-profile-1th-alloc.html) + +## LOCK + +[put-profile-1th-lock.html](put-profile-1th-lock.html) + +## GET 5000 30s 1 thread 2 con + +``` + было стало + 50.000% 19.96s 14.93s + 75.000% 24.76s 17.96s + 90.000% 27.25s 23.90s + 99.000% 28.48s 26.10s + 99.900% 28.56s 26.33s + 99.990% 28.57s 26.35s + 99.999% 28.57s 26.35s +100.000% 28.57s 26.35s +``` + +## CPU + +[get-profile-1th-cpu.html](get-profile-1th-cpu.html) + +## ALLOC + +[get-profile-1th-alloc.html](get-profile-1th-alloc.html) + +## LOCK + +[get-profile-1th-lock.html](get-profile-1th-lock.html) + +## Выводы + +## Улучшения + +P.S. Снова спасибо большое виртуалке, что за время написания отчета и проведения экспериментов она ниразу не умерла. \ No newline at end of file From 7eed19221b264ff1d73126d704b8e1155004cbbe Mon Sep 17 00:00:00 2001 From: alexBlack01 Date: Wed, 17 Apr 2024 16:20:15 +0300 Subject: [PATCH 60/60] Add report --- .../tuzikovalexandr/results/stage5/report.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/report.md b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/report.md index 1e4fa8695..baae08c51 100644 --- a/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/report.md +++ b/src/main/java/ru/vk/itmo/test/tuzikovalexandr/results/stage5/report.md @@ -20,20 +20,51 @@ 100.000% 9.33s 25.54s ``` +Результаты получились не те, которые ожидались. Время обработки вырасло почти в 3 раза. +Но по результатам другого эксперимента, когда входные данные 1 поток, 2 соединение, 10000. Время начинает уменьшаться. +Результаты в файле [put-profile-1th-2con-10000.txt](put-profile-1th-2con-10000.txt). + +Отмечу еще, что при увеличении количества соединений возникали проблемы с тестированием. Все улетало в таймаут. + ## CPU [put-profile-1th-cpu.html](put-profile-1th-cpu.html) +- Добавился ForkJoinWorkerThread.run 16.40%; +- Изменились пропорции некоторые семплов. + +Что-то координальных изменений я не выявил, за исключением того, что добавлась работа у воркеров с CompletableFuture. + ## ALLOC [put-profile-1th-alloc.html](put-profile-1th-alloc.html) +При работе с CompletableFuture появилась новая аллокация ForkJoinWorkerThread.run. + +При работе над 5 этапом я изменил ConsistentHashing. На профиле видно, что в сравнении с предыдущим этапом аллокаций +стало меньше. Но тут так получилось из-за базового количества ack и from. Получалось, что не срабатывал итератор. А +так аллокаций должно было быть даже больше. + +В остальном ничего другого не заметил. Хотя, как мне казалось, должна была быть аллокация на дефолтный экзекьютор, так +как сам я их не создавал. Но этого не нашел. + ## LOCK [put-profile-1th-lock.html](put-profile-1th-lock.html) +- ThreadPoolExecutor.runWorker изменился 3.25% до 37.07%; +- ThreadPoolExecutor.getTask 1.98%. Вырос не так сильно; +- CompletableFuture$AsyncSupply.run 10.62%. На 3 этапе занимал всего 0.36%; +- SequentialScheduler$SchedulableTask.run занимает больше всего 21.07%. Вырос в сравнении с предыдущими этапами. +На 3 этапе было всего 0.58%. + +Такие изменения связаны с тем, что добавилось много асинхронного работы. + ## GET 5000 30s 1 thread 2 con +Аналогично, как и с PUT запросами входные данные остались те же, только количество соединений увеличил до 2. +Однако, в отличии от PUT запросов время стало лучше. + ``` было стало 50.000% 19.96s 14.93s @@ -50,16 +81,27 @@ [get-profile-1th-cpu.html](get-profile-1th-cpu.html) +Аналогично, как и в случае с PUT запросами. Только немного другие пропорции. + ## ALLOC [get-profile-1th-alloc.html](get-profile-1th-alloc.html) +Аналогично, как и в случае с PUT запросами в том числе и ConsistentHashing. + ## LOCK [get-profile-1th-lock.html](get-profile-1th-lock.html) +Аналогично, как и в случае с PUT запросами. Только немного другие пропорции. + ## Выводы +- При добавлении логики асинхронной работы с CompletableFuture, соответсвенно выросла и трата ресуросв на работу с ними. +Соответсвенно, самыми показательными были LOCK фреймы. + ## Улучшения +- Предложений нет. + P.S. Снова спасибо большое виртуалке, что за время написания отчета и проведения экспериментов она ниразу не умерла. \ No newline at end of file
Produced by async-profiler

Jk9Ml6A_-i|n8qLn37UuBQYw_6BKBC3K&cd>$X{srDdZg(RpnW$^c zxNWYekGr6TD?iO=t9}=88)1C2u+Om3aKdOWs@Rfb&sDzQlG)@k>;*D%Xuf#-N1qTx z`V?Hl2obr}oIsyKd00X@6(1pd9L&DAjYpIh+rAe)LaLy=j11Z$57Ua>{wN(m@ESQd zJ&fiv-z*EHc!~FM?}J}`Ke+J)mrW5Zl80I?q?8HlqdkaW7h+=UFNDxwXRJUr^u}z? zD=c;%ee32xvoGO87v3|PaEquZ+mlH(;xTdAQ5o^s3dw5N5OY-`-&=588l_BjAfkvo zLufNIZmL2NWmSDF9^wU$grm7e^X)*69+?&<%N#;0Cg$y@CD2o!=EqB5OcguuHJ`J% z+4vXNaXY_E1%Y9AfO^mKcY@imH3}!IcG5TuO&z8v(Z+nB; ziDN61Aa4uoqB}H+EATEeH&)Hrs(aCR-q(#yIPNn~Tshwu@uwFH!UDv!1qlpbmLoMV zEoy`AO34L;c{Elt)moJPJ5D2))Q?a#U~5ITIINAMyN#oWgSI&*x^oCwd0M=W?ga8b zEEHViwC=4THW_SC8tT9j)QlHJJ}RObP3DdsW&MF7%OmhfBnv-x20ccL%nvq28__vx zgF|*hN+YUBvQJ)Jsk?zQyi&Id`$0gUC$cD7ZG&$L=p6c#hr(tc&-v=^)!ACUma)il zr?l~CDq~##y5mCc*pE~l>fP|WC2cl~*pP7QQTo6pF-<*|!DOpQL|a`!Jy?@S4$y4h zy(E5g)TABWEb)q)Cl@xt#z}fNoc$cAVjTuqVZ@UbrQ>{s66W0{OVY8^!ut8o(*rzE zT|!a#o#$?17mh1fU|#&7$5X#f=UXiUVn_5Fk9>VoP%Uc5F0STB2ALSEqLk`Fa&j3+ zh8&fes43>F!{Y!ALW!iA2wh!*ktog4*qU7_+?5|M}?pL>wHN| zqX5u}r2PEe3X8r^pD&*t-8{LgJ_~ye;@sR*%bNdz_#insl6?9R=`2orA;)gT?bctm zn^;uXQvo(braEo~;lIqbiVv7p3G!rXQ~GRvDNhy2Wyz7zW+|3(%~ssDw`}Y7@CXpQ z+?AY4X}b~$Wj5%}F;?-Yowav=>9Wy?-~2Ki83fPuhWd$yNEm!R)LH-znP2Aen!Q;EW`!f zuzfNvm3`l%48}VtV||(&7_g}QvVepO>^a_C`J~&(%$Y3d;f}A76E!V@WKoAT^M81{ z%BU)vwo579U7~=5fOMB4p)>;0jdXXnq=2M!NsDxMcXy|BbBIHK5oq#e@AOk*EPDHl?@R7#FNHI81lCN3nKpBU?UbG@ zvj{R@1>;z}MO3ROpS`|Mg__?1zP(DJWywbVh?>E$ECz|sLgZm3ixP%%0VfYETqWo$ z2rDK!WQiE!>JmuO7^_T|5et6-chS`M{8B_Gl0S$P(L)RSeqVQm9f=W_dZZIQYAIl% zN_M%Nyqr3z>sc#HWqF~2pxqxyLy3Q^mc=>>7eh@SjUTTdR4C`pNhCGN5(+7 zRUY#B1qIO0o%*@zTXo`ZEN1%4b<;-n3ld(ZA|+4kT7U*YsNLs6I7JkYX9|?cB5=Ge z#&07P^DPithZ{I=y(Mh@kt|w@kWsCBXOOJ&TC%`5fg<;nbCHLNWpi&Ruf-Sww#Ciz zgv}<0?K8A@DM9VerI`u#O$&Dxq7vVszIxHYG~IOX0UZFB>1!eA+@8`3BYD@V4WhC~ zV?jnVg{4G=g;{hAlkU9Ycp|x(@!E1UTM{aEqGU>&iJP5Md(~a5vNDj)crdg!oydjU z>F+!%dgJ>Cur|*Yoq9)nh`S6Hwywos#1y+cM9Z>wBu1$&Q>DYoosN?+BQ5bE@Ldy> z5EF&X(~9eYjgRnCb?Xfn*PRbuH_xKVE@C$IBXZ;z33|S7_>X9zcxy2G z3A{{PulObxdj3dsbIxghq-_%m-GZ1x@oGLmg5(DBWJsN4r5{8%V5edvaTED?4 z)soRI%?;qKp-U23@}3%lzM;DHs=)-H4Oz_4k7lN*D$S_MgmR>5lp`k7$UY_GK}@>v z_-w|X^&tzRf_%7EX>TUp$&f)Iuy=7@p(RY+TQy^KSuur?p|n_H%A)ZD*tV&yzhR06 z2$K|loWaMD-SxcPdjum8ufT2dQ`5Cy$Zu$f2o&a8eQmQb=$JK&pW?b6IHR$a14xeR zwRc3u@Ze(L@U+!}sRrJ5xigr!mxt#DC9@dNETb^LoQc;ZCb-wQAy(t_JDM!GQNmvB%Rkk*aK6u}!$uUzQ+x#sxNbUQK6J z1I)>ck`1YJT?dE1eXBboAq35ntDe=b3}O?!)VF9??u%OPtj;2 zw1rwU5qy^;V$A>NTpVs{QI~ki$-rr%)xM^tqm#aw%vL1mg$1Fy8l-%5=}cVw-%_&K zHH;BHalSe39UCx*tlrrczDnKg_9U@y-jIW#JJKv|I;{aC*Aa}9^>T0KlvR^ZjVUoy zRYN1#@8<>RrR?=`^kL|Th2En#^^pr*SbWGA>XwQj?#e*$t)NR#{D_pMa<3ogu}X)K zV%>PJOJ*b!xU7dAoEVGvasxp_8U7VSJ30D0E*$6g4Y~aP!B`$;?{Hh4&NT=N*?o++ ze)04(i`p7yJn3J_8YW*DdPx58jpsD9WTrsY3lnBza2v{un(Bi8FIkLUUbd?wYwRyb zhyMt{$Et<$tA?D=Tin43o>4z1d`XwMU{58R4g`+V|RI z6INm$&<(1X{38hEd9Kf?P`|wWfkd@vH-B?$r0!7k#a(w*bzr62EV9Z5Av)Ej5G7NZ z|L!}24a^P3*OrGA115_An+^KC|INfV4e`=6<3_fSC_9HUab)ESGV7ar;dH4)L~A@b zDx35gkdCoXf9r4|2;)NFh3$U*GK=TT^jkS&8Yz)3B-q8gGqDL)F+45a^S|AoPDO?b zNfekmexYYJc;TXo!^3Hvo_P8eRJkw>PR=pE&GYCBT)n4a8F$*d{LvtgV1*uyZ4qNF zR#FeU*=xK=rP=}Tvk&O@weU?Q*u!U#vLcSMS)ul|yfJC?#|H}i$Y9;?keiwKB@*u8 zD1llO7_ll}SEJ!O12KLUbrpEsEoMB_A%uXdH`|3Xb4ikXg1$;6DeV8|njOX~%t{9* z$56wm1Fj4li~K|%%`0-4P#NZB3dI&T5~-H*n$nkcId0c&VHU;VpISenS^c-N><#3c zuw6MkY<7o!^1NI;4xhNtXp0q>PeX|YuJ^N^T)|g*aoQ;Hu6K^0060Hm5J;+!k{A@9 zls%!rsc!TrR@fV zZbzH9<$||G(4#iSk{#K*|6QD2rZR`VkM-Os9?uy#qxJVAYsxQZHRKFRhB3U8@3?QA zQVJK3W|-%RH!~A4^{B&ZiZK7P9jS>R#K0>bF85R;Sgavv2FiQoiC<14KCJRTu^+qp zd3hBq)HG>xwxAjh{R@J3$Yn#1$y>g_yXU{{(XzfV&f8$(w?#K+w=CaK;h(*nuF-)W`cHh+X7=>cmf zk{kChw0tcM{oo$5JT@}z37ERPYB#el*(cdLAvJ;{9Tm^E))Fxx2Qnk$4Hr=BU-t}K zUiPm6zKY%wVyG7XWysoKSY{W=3pR#jN*7fNYuGKap33HWO+vxmes0@r;gZG`g{k+vuvNzBxWBz z{T)JyI$~EH>DN#p&hwB9+O6OVonOvGfid5t!yc3jL(;Y0ed7|-fv~rJ_HWkPiS*5V z!|^g6-^gczW>~^q)q{dd#==-tK8b$*h{W%KEhMhbxtEyRwUjfdO<7;r%R0ng5pJ2E5L0O#SzRQ{vJJVl#C=z1ammUMan2&4@p_& zH14{4UcNP$l*cb}a1`D`%rIYp75 z>nz1wu!aZUfCzpJkY@{sJ<}ItU2n3bM8^h1eLor;aMlps$-Fza*lp9~wEL7@BEwZSegEpYl^@%=Lb3Zf%KFmAt^3(J=5s z?}^ZAFk*<_`#b@0Q}aiPzD(+lp$;Nscrg_~;62*J*K9|Tq(ypo{C*!ve6clNuR~+~ z57CqO$AJBgS@r|K^=V-RVnfV&^Mk-iHpZ+}1xCikFWP|`fgdnl_T~4!u{Q&6_d*{3 zIVhe1*v-81U~EWDYgox7A_}Mmbh;S?khY&6?-6b<7PBt$N!zi2lGsVSyDe07H%!;^ z+ni3S%;liPD{JWz}%yS4yi z_v;W7lz~b>Kx*^3p;S5yAay}Kf&H`oNcjfCsqf43(2pJTEL~S?D0Lw4%} z<>ed42%?`yUxQh7BelMMrvPc#;T9uLz(hy6t|hxborWe-C>)_|0E3yHN*w!VTjgrB%Wb;Ao=2lZ?9>XF_HRDM8s17~Hj7gXm|vgg==W z;YibU(CS~`KxZ+=ga`Z}3~SLOV?8U4jF-RYR-N0Y99bHOn(xUL`6vit!yvZD>IvVN z;P~7dUL*zN3PFFn_B?#nY^I1m{^Ey*?Q^>$qM&W%2v3bR%2{iKlA?&gK)UK&5`1jO z^6C*rP4PyN9H&4Ani0R$owZg@&k2czD=d858WLP(V9yV zAg1%ahZqdy*T1i2c2^-5lL{S8ba_avb9x+aK=G=!45_v+Vx zI(==%YUg&5pybN55U>i-QPg$z_Q(`S2Hi4@j3V~$5%Cg-xIJqKGN< zrbK@@{8d#cv>-V#PQ#HGSol-=dJ+$A3O2sQnwL=6ffXnMg?n3Pdw%9Gq#3rH8d3(V zH^w$2&j*BSQ}(V@aF4@cLUR+K%^{%iPpUQZo`geiPP9_6e~@|5@apj>*HVm>aM}3< zpq(CAZurWOR_hlrMScJXkgm5k|L|pLYW6~E1V$XqOGt06qM!D?j~)jgWGmuaM>Pg< zrC7azw8Wuo4Vv&YV==|i6cXPMSYWLOD?hx7&w6NcbK^eugG+k%#X*Kw1e1t`lczYUru8K>b*uWZLoQrTB}BnI#&}dzbM!( zvrJI%XFkb0*kbp)V6y!UI>uY@2mBtj7`jt9#i->p)liwaLu_v`2eCKi_#0ODyi_=w1$`&q-O3jt&KX`$@Z3 z!Y7#H6h^;yIv#MZ)2aR5^%x|abQNqo*;CVF}r*WXtRB!%taTHHP*%~h{qUp1>3 zk_nc=rY*rwWg1*9WOh`FU>nxuOWu*mQKHYt1dma!kCxBecqHEo`#ZKn$P#o-pG8lX_;ZI?Og%)?i;y2Y7*!d`5FR4Iy z_vm}C)Kn4*e$xb)1b;a)YIn0g+E|AS3w>#6;YZUF?38BKKY>d)J#bI^3~tnuZGvw# z&m*G;BQkm^odIAvwzNd&s)A|jxXw09MDaa(<%e5SRyPCZy#zS!yX*4Gp}EK ztp)uJhoYkl<9C>fLcCvewZ6q0tIysyEd5c_*^06j|CcTqJX=H)u0`333;lli_Uo-s zqq34szfGv)>tdX^;!CFv@Nji*H{Ft}g8JRkU zxnvmeWW?-s+3JI|F^7QC!$w+D9-bAuc5e9vWndr2!2#Cip;z|LduZXFPoRSP?k=G# zSA&G$h#s>2u#9bj9!W8%#-?!2ZW?T7bFY9s*mo6XXILFmWF?;pkNb{tAdd&;gQ8(x zeqnFMZdhoGwTW+*Pw#99O%IznS51gPaWBrH%y3YibC>}Sexdz~-?($~1nb}L+L$QO zkKdHMuOP)%md{5CY5nS$f4+G1+Ex?sX7$E&)iLzg#4B;O+WmcO^Zv8I+vyN4Mk$0! z!@u-e!`kBGx;v{_KrRdzaXe-0wuEp&)!Z*x3V z%*mPYh!yd7zh6KC?sZp{#5<8fDM}B!2zhg zf;|1y)UC)xKAHVLEI`Ql`=reH7aR?NC6f|Gw1J=1h(7o$ad1}O_sKL-<*zbf=X5K{ zymU9>vSgSqWejUaMX~+-KZ(NMZvyVGj(dWML1Yem{bM7TfzBLwaMcJN03@$GNs>B#}dd-i)g+J-IqL#9E{xE`p@Cf7_vrSGZ zYO-vFKql%iR`XMPp(dvlDJH+}&&7%xTT&0~ZY zNP9>g#(W;W%DPbljx*Ut?$`c+pX1MM8dtDNfgL&Y|4t(Iv7-)O-ky#)BU6rAzo;lk z*!vBFm6^TXwGiv2K%VN??X&}zt3>Ii_7U$CM6;Pkm?eDxQ3r((rcSd`w*AX+1MBVT zNXwE}`m!W4_`a$1PbhCY%XRg>Bmk`vT?n(sh06IiA6`_TQhTRAob+4b0B^ar7&agkaC;}PCV8op! zCrhS9>W)xR6g3*%In|(qLfm*AY$M)GzQ3E3RA{&SRJLP(H9A|yZ(-1rRk-f{5#xf& zGFbN;TsFpqin5qb9vf;dS^rVuC!|eURvOCx?Zm?OEV}%p(75W-Qh9lnX#JzO4vdjo zK*?5Es838#Se(W0$ok$ZUqJP=s|(6-cW$}gp+ULj$}5mxLQzQdGan_i5PZ1toKEcd zd#~syNuRb#YS1P50sf<>xM&AN&pEE-X+m-{cKS_B8I@I7F;`4dMa38xKI`R5D`|BF zlV*`CBYZ_+eoe*%$>rrh8DS9twvCU+uL4j~K6SjJt!J(W`$How<3< zr{c(V%TOUvBUt|HbT~4Lfd>wwJn!=c{fVv`K^?>%SqYKIl)No*Bl|ANPNd=;0?pIe z)1TycIv>B9sn`ZB{@AAF;14(=_&n9WqAZ*7s#P9>mCEcKO(ZS4dt8p0{YoH&z4RRwh#VCORD zURXR!hI-a!6G_BxKxe}Kwu8^DB@|ZUU9;dmL44>+;#pSf3$o6p;<d`gu7o9)v+$BjV!#ek|>^G$ceFe2v%R>&L@|;3G#8R>< z>@g+^d1*LaQ|bbEX9`Y&79||ZixQ-Ij*F0k)T0;J9B|lgdhNp44Et!k7G|$(HRj6N`UX>kv-WnbU9$D!JDU|L^U>w%2&=Ww6P*? z97oVt=#CKH!AU1H3g-1kQ=AlCoP0HJZ;~ZUg^X>(J9bJYMALyc#})QUG(%QVENRJw zL-{UCSO*iHY82l$?<#l%6Xs7aN?>)D7qj75ST;u{2a?U#-B9W*fJr0X};_j2_|BlRK>p2)(JY=o} zPY3lC6Su68a)$m0GsUW(JFh*@N1|YOMmrO7$&l~!RhD57=W^b5+9PxK* zOb`%0Iuf|K7Z}P^uv0@$()zJB_LPm*IE$A9`;M3P`(VBF!CU^&tkJ4m)JIX!5#ni8k6)oea!1kgovnj&sW+D!}frqI0QmGdyk^NyQnR1%h$j3VXW7 zQY-#2=|xSFpCqN?yBvYY-X-cl2umo7{sRgT;om(AZuA> zwcdhvEfQi_8z-8qg}^wfO~Ft+g!R^!nHtzb$l|wyNOL-+rkT`~! zaS2b>b=uvHMUIf!ydt_x{Ug)iTil3?@0Kz*(qSkxkd*86h0;cZY5G%BRgfvvo>$kI z5_ov?3e-r%O7f@heNTr~=A~5JLmcV2KPKE_Y zBow8_(S#+fn0>s&1OL#7y?jf18Y$w4;jwWxy%kUJ6AL3~O&w8KjbTy?$NblIl6 z#_aWeDgy13M5h@J%@>4Ba#iwfpLda^oK0oJ?;wyl=ur5iuR?KF9Zqz164-Ag?t-s}e;2RGWN;VR$8bmzIs z+y3bGnV#WTwa;IXBKzz{5?~QQ>8#<=nfrd>mcBkec$`5}LdvPh?ur3~N*V4Bq49VM zwlYtEQfAnLF*a#ST~unz9AIPziZ9tmmwY!h7Znh0{t(BmQpAJ7+i3wMt(?;_agxWm z;JE7EM5g8esu54|&rfl!l3F9uk98+%xT6Fak`r|jLd+m`hLqjTuuMGkw+`x4{)qgaBgCFV|s(5au|{ATVqo=@EnK!S}o zEjyH0K$-~}OCb>>#8>dJWj%u9R;DQWU;E?CfT7HImcFGvWs$dTqxv6y^WL4+*L^1R z`}tuKQAx8$G_w>`kgN>TUNvo({R#pk6q?`2b zqHGeq&h?Q87m7tHGw?hj3o~6E=|3!36S;-__5|t>tGE^Q7py~=ZmD4+c%3)Y&t-^& zg6p=}M^8@n%?3nrgh99IxOrksdDn6;_&WzHBeY8r+v0Ze+S;_{Z=-lfaDxg;u;RZ( zJRn~x&iB6L9%t*wU4f1E2lF+&nTbWlJljWVC*k*oyNEC+EfB91$75m3x-FmS zX_!G`=@9Sm%+wo|%KB-iF_7}%TBW?n*b85=CZ+e6*b-`Q&~_ob{K_4_37r1nNX?&f zQun(}D&odsgyIs57fbJmd%HQ)lgx-34MV`gr}@y65xVTBIG%fcBi4{rRBwQ9-@^NS zHG5TK=|84G8G=xzTwyl^Jv)!H2qA%YlS>DV^29uuD zb>$V!#TZ@PoI)+Ijyt@D1!s*GL-ZkJ_DhBx6{2bNv~eHSf9?;{F#=z}alp(luq_$*q-H-{_QpeS{a9)#0th;YB)@ogn$U_ntoZ)F2(= z==8wEaU@^!!vh(nx^XunEzy>uOEFm6?gfllh6v+i3RVi-m-~_$P7CoDp(W5sr!yuN z4mjbZoB2)dp#V_R`Fvn;x`S$yalG?6#%^t%O(F0o+)h+ihI?|xe*uG{1$k@A#%yo) ze?e{wJyXL|G0&+xmLzh&82Qln3}}DrW#MBK14<}Arbc3|gmP1!@V9T)6$<-yu&bjq z`h{b-7N^V!HlYgx0j4vNIyZZuQ6?t)34?foEnmSr;-+Y;F=@l%qJ-5k=BpnXWk|32 z<;x~loMD75ju}f z!=lM+@@VW+w4Y=xj1}wsou3>qj7s4I9iXlg(|0}?~*GS6INe{SYwGcm9R&(*_4`{!jhv4>|~v*LE>lDk_;PbK;q zi76D}xk$-}y>2fbr^X4Vj=7-A4Q7OPT*~xe&8yh1}yJwY_?l6fe!}RKmN@O8{^$hMrJ(u8G*9( z4b9--27XuTDhnzpAMO7wRM(A`WnAGgiRzj zhw(%c)-d{QyeIZqt!0+XJJ&^M5Tf~7=@ z{$OTju@P3E5A3f6{YSSkZfgNO zdfJZOBiH0zmXH(!Pj4=!oO{Np}+2}`}8+I$Tm=iY;sO|lm@m2wA#)99}w!aPAWOU!V4XI z3&_;g;cfB6GSA1ye@uS}&z`+*Nc}xL^zt#q1E41yQ0EjY=v9?`3e%xWC6hLx=qqz? zhP)?7FZD^A^(k_Wi55oAA{mX(f@pE`kw?#6a6x7M<@Z>a(*0&F09mA2<~a?x{ebpz z_TpB{p?DVo7xV&XJWa-HxA!i_wfI8awpNNH__H_!r#g#9M)ZL&{Qj|;TqAeH)_8A9 zY~Sw%8W2oprsU!T{IfU?xh6;c?mB_Letp~a$7Bk)mY~K(7hPkJYTFL5ZrT5}zg_U0 z{r@$K(6A08#;b}^jdSf6FU*8B!}40~+bkVK%dR7Yaq~Z`q8&VYK8;JN#Z~I= zV`3a@n>#HanN2UUaw){|y?eF!ZJ_4tM|j9 z@rbAUj!S_*JwH!tV%uNO_d(iBP|P(E|$36T@UchPQCUMw01UjG?G=MxHEZDG>cd# z1RYjpsX+s>nBHob+K30oU*-jBwkuZHJ=meR{L$S_e09gisKxb7eiVWM+O^=Ke~nV>hEeV$QWtS)JqxPmVj6e%yB7$ zwl-Z;QEY*;bQiwe>7=7v*(yIO(h%BM&Ckdx9c?MFt#;d+Y`0+*eJQaaS#$~XF-Pc2 zgU~^=Kn#qrrh;VJVpl&<1Dae`A1G=tF1spmFL-QmOG-1-?j& zKLN7I3pTmvdYr`0Xlt~hE(qingU}ITXs9O)=*_)6P7&bH;y=1(Q=}nhb}qgDz5r^z z3tr8jdd^@1@}aS1I`_xM?_dt4RcFokIQoEUC7!0Um);&a{5sA$@e@HA zVL*89>~v&8AXCZTU)b{^l*6sQO97NsTQV_6o31_P}vGp-Aaq&u?r1eF<~mvDSK zyM{w5(^$or8~wIr(3-Hm#HbFcZK3v;-c136Nz#1UN4gy~+*m?bxh@}A?OV7Af&6=# zj9^i%vfBU*A#cWWB#IP&RSCn-%y@O)l1_;ZVba-~ieG3o zXo_H>3)Q<6YvE^l<3Hcz?cT?sd5Y@ts0odHa$*O+*g#^Xfe|;Su;yPz8 zL3*(7_XSs1V?kr=R&l=weG9F7)qSMxw+Hl6xwHaa2ts$a@=G^qln+U#7J)#eLnX~8 zy%|QwwWn;M+^6`3t)75WL#^(S`x8mO(t;vHlA@Ox z<4wn^GQ;k@7e?A2wS#L~2T;>pV7(L5`^{gmW<6cI*L&>_WmD4n+~LeMTGt#C9VVsf zG{7dp{*LkCLVsSRs^WO$_JqI?H&+M#5?<+VEE()zV+6He6hcC_V^WCfRk&j% zqj{UgZ!zbP9tOZiR$Y#cS8KW;qe>s9#Q4QbQSGYAG2kkw?kH!U$c#jP+uC`3*fBY>L1spQ`HD+d{qRtCeQvdv<0!_keSa=+x9OGEv^)31j1lzA!PHRg3+aJS z0s+@&@|oUp!u!o-5fCq@XTVXC9?iX(*pLY@`Z9apv!wYre!)|bD$1WV>%qm?k!5X8 z!7jw_4+iw-fcGt`b$p`ox+yw>lbqwO$yZEREr6k?3zfnhR;Mm9^d|$@Tmap1>7hE# z0KlJHig~%qSPO7iiiHnwZu{(T4)Jb*kr3(lfj)RUFCbDOQdDn`Pukq%`{atzCB`f4 z-(9LfZNO-$MJ~SO#6wss`^8d$uoc^;$luDc)^sIu`<#(3h*=AEa}GI=`&}~uR0L_VB(Erob zhmp%flnC?(AKL(t`xGN@3U#@#2(XDjU^Z4qS%^;< zJbBleGnj?DeJGFYCuIn^3O?>j+%&W~ehyP8le3rm3QxIBWwj%9+o;wx!PgTW+VAmO zdZ10^_m3@qPKk>eZwX;$uRF1{#>)?GT$e1@KVrrXNW!H^kv}2YLdn6#fcgt1A{7xm zyz%IVfpUVI>Z{Bh6sL4@pA*MsVYF9%6r7HBnK32nJS`ez7mINrPrCna9m) zpAPN6)6){SrwQ$RV$-7|W?FSM46BTdOm0rHMyk?&^9a|1+6;;9-E#G!;BjD0Z@Pzy zAuN9yo*ztcA#syfJ=W;y&)dB2TDc7rlNaa5>$lsX{K)-G%eMnEScpOwO7}Bf+JA!U zGI0f&iq_;WdC~{B+j41CcGIke^D*Qt%V(tGgIM%SC_msg3Ujl}UK#aM6U*u+67YLB zC{`M%?Z}cl_sW1!2cXna5@kWPSRr<-&I+SOFB^@~o-x6o6Md{Z(*kQL#~@dlae|VZ z@NK}Zvn-+ItP*Gvy6rrj-Kva=2!BG+o#SIP0ew7Ja!%1S_S|_K;Wc(kpIcUGQ2*t| zT+Qgb0msGKl|X>>0sOoAPVu5|sLAFX9WpG=YicY%1AQ`h*4kA+hWJIxi)QshGxzjn z{-zZBBZ|mM1~rDdezr@9SJUO@)Zl@AnqqfJ;z zY?({TUF7!)sPncTy0dlNEk1>Yn8GOI{DJM1#k|G0&b`WV=tkJ?oeAykDaS%fWolc{ z(}FoA_^0+gQ!Hh*j66S6l!^<1R!<-Waqe-k5L_5s(PQ!jD!ya^j`$eX+mekHcUescO)ipls>4unAkVXA0*d73@(^Fdr{Miy zti!(Nw6w(9HA{m5tfq_~>Pjq`PWFck&9eUzGv~BGAEbVcr()F@!Bx;Og7$GY1?ByF z^VP7cj!86u1%~D{N10$d^C&zEew6RdX){YMTFcdKDY-s${+DT+Hgh6TzPKMka2u-- z1J_xwp0vQHkz#Gm4(DccRBP9Q0R229TNE?Zh2SQOQh8t>OVIHXS0nH3Uwr`Trfa3- zP%w>e=o~OU@+te}m^f8Zq_xr4vsez&0)%2);D<&4EJ4_2pwV$L+VR(ax6e z4a|gZse?FzL@!I}-W=$n8OPyqIYZgI=4O%t`vzCh`kJYa__)`W^!&p70P6(!vl3t6!Pii+9%PQi5!X6~P$e}i zBGO5|qWGyaC?u$o5lAND$f$6SJ@`7&)X1In%0!l~S1EEmg1Z zlgiLDT;ngePrg9cc;d`oCC;;cX&GXM!!(Xc9Q+pf8<`1RFBVOGWvRa%^L6%qkCwE6 z@Y@aiaHU^AvmVCX_^ggv^=sr4UT3IJvZv8bWvv%FVhduuq!`*La>Q9iv$GBS4-0^w zwypH4)_jTae)415?f$k&UGbMBbk1yviK5%|eVeIzx*W+0*tgyd=|d~CgJ9JQk0VaG zPO?Krj6-O{tEQJMmy<-78RT*?h+whcZFk2wK1IfXIlZ=*ZF8*)9w>cqz7a6VEoF(j z1``K&d$L)#KcMQKlUk}hGuB?UkQJeH~LrmY`YVUK-`3#}Q5wkYb_L@`3+hqen`VOSkZeOSGz_!sEB6 zVw0sm?=K+8PAV{g${*B;d_KSS&b$j!ha<4~B+|L#4Vuse+h$@a!K@&qNG$I-fG8;INxZy2J2f#(xlPFyj?v7@59BW|S zSct7swf}WvT2sCQoGvZlBOF1i+;U?N%dUPDV3-}2=DU(wRNsM}_gq=xPW~`$V+tRE zg6Mg5uD3@MsJEJLBVX3&H)#XloT*AGDH;obH(e6m7k>+Q`pJ|rM5NxSHhn6OQLFcw{IWGFuk>Yg{P{Ab>xi4jzrfTv zZI|rs{v9R!cI0aUPrGM_e$}sPU0xgz`yC6@Pe1g;oP?l?@yE(((%tOBES8abd15{6 zC9zu@Gs1d%Vp`k^;5oWvks6(4H728Nr5HGc_4cc&KEY*QFEfkm9faM<_md(J$wZrB z{K6T|%$|lXR4Hz_R$Ek>EgNeAnO%!X&Jcd}IwJW~$GUn{A7mMyQUh^yB3bO!tj1>N zzhIywJd4gHxry=ioDF9Q`D?jv%aWX~0*sh~NptRXEF-W%4!RfWV?`w76bH{opFQV~ z11brN7gmzHIE7+{w<&Z>Qx1-RMR1V_)mlBci(b;*@@^pt_aeSgEjc2PA z`owi8ll2bDqVfQhgyCoq-*;D+Q*+R{q#dxCsU5Q*vE;5^vpmgG7iCV2cdl72c2-Pz zy^h37Hxzrq4fA(5}H#hEN)h&iuzUM4o{nHLY!u%kh!P*;dE zR4{f|Y@|8$`aCOQ$o$7cmK&Z-?5W*M18|H1@qs38D!A9G&#c2#&apq@B`r?{So_M6 zG5-v$nUeym9?C7-*%Ct_e6k&3?oTR_gY-xJm{&u*>Zj7L!gg#M`HJSJDsiY2ET*n< zsQ3&F@*H27R_6R_=EA@|-RL0i#O$Kak*YP*T<0wG1D-dK*)n0NC2)Y0ZhHU_GQUz$ z{zEsx8K-NE)s!FRc`=u-sSq+{kaLv9cL2)|C?Eo@R*US`O;2YIzQt<0Q=H+20s5=9N5t35iH`^6uWb z(DwcKfWrQS5d+m%%$Ixpkp8dbYZ_AJgtn5*F49cTm#D)r;bS?7gkwHHKk^8?o-bZ3 z{b;zK|B6Sh9&>;1Wft4_1+T3`CHFON%@@%kMI;s$_-|8d#@!wkxDwzgN6U*{AGQ~{ zPBl*kxm#0>^s101Q=}C$f2iN33>LJH$4J&#nz(K*{F@wIo>v0ky`jjKA@6znHnBFv z2SJTy)KVVCNi7#M&y}4vI>+RF8}9lM9`Vio{<)RpVvD5vC2WULm)!#Amz#NFfkPp6 z1q4x^_T}|5_Vy=}?%+$-^`VnXdV-oWp?$qvzTxyGMS#rCU8iO^T-b!jMbdW6auDUp8XxZO%BcREeIK$`6h$tamNgx#foViGUYY9Nt9^ z|2~u|HI$oLE=L=AKYrclumT?jSJ8$o=Won4YS&*~obYJH1*qhjs&6VcK&W|l=yi9P zrvq^$9JE~7D<6)>4p1zaiE&MCbV)X(`PU$DaC%L;SZa2(@`BqU>2_Au{{3Bwj7A)k zH#vjUN}bkA1>4hQ*=%{bEk$MD7m%st$$AbR`v}+X+ztMNs<_>vGGSmJAT?Vcm#Fk_ zm6dHh>OjixwX{pNoKu^MQvP~s0Acg+I`gCR{N(as;eFVvo5_>|%$imS?qCAi5|vCe z9WR))eg2En@Lwk_EBAXi!o!GN95N7TxumT=30c>N;pgmro|-|or`7_`03o}oFxoO~ zp>5YP+rZ~3ZXrF`E{Q0MN~5;h4x+;l4l`KeL@2)Js@~iDeYGUAS2p6SEnsc`FW}H7 z@7a^vs5>{OJE|+!6nBeG{G~(PaNMJMH$<019cwhq6L=iBV9WRjHqd~$mi^gwfrI+p z!UdD0*;$I^f4r5{yT5+(^*DMA-j~gA2D;8jz9;kYH#%P!IA<15C-(n{;@EbqTX&>F zBp&hpH(*w_?$B2)5N^aYW_#)bvCl(v9kx9D0vTjkJwf=r3}>5`g@M@pmb+8V8*e?) zzT%e%u@gpma@jwJWdDwNrxUZA^}J%GE|<`OlAp?YyvU3HcNTB1doC+_j3%{&*>gwP znmj@W;AKPmAXj1?UqBHVYv>t<+W$<$aLXY|bSlbY?ts zWQCIQZdV#Y4kJ@14pYJlk`J!OpBcFg-+k_(BbF9o|3I%rDHv^Z5W*UGM5+%S6)iC$ z7oV6(3idhiDA8-Kb&~<#>&0Mm$ua-o>9|9P|B3*Qb;fqMd@v!8Qx7XmdSW(@mSNAf zbK`+yO6nk+%kgu6XG}Ke&$r!P?A;C{9Bz6KSNHS_QUp8AImu}n?g@)G^UE=~3p6{o zrW9Xx;c^^8))0Sd`TVb(kSdHQu?A`3`EPR@6|YlHYGy)Lf^beY2%jekw%GqIJGeD~ zfzFD`%#Ex*a>4c;sviK654szuZ`|mH#xx>7z9-Oz)EcvSJhE(P^dt)L z4MiPOxM~?(EH6tL&J@gvDvrpqUd|F3%^6;OcZwnRKBQ26$MCMwyYb#}==89iV`$Et zjXf%J|5oeI`Wj$SW-gzIK zUd~-`Hw06B#a$pZI5=gk_nsW;tVZs?u0Z^(=t&=XO3CnG_arra*JH_^UKI5J+8!|@ z_|J}=Z}FIqq^xk|BCp{IxFLu~msS$U7V~}UZG{ig<$-ndsx`yr2pV2wclIEuzHEJi z_G-yyLj81QjC#=!FN%u19dGrBPVNC&B&V*z zTITEg%k~`9Oj@+t?$sart6gthaw$+=s%pZkFyh$v$E_~Imu5e$zIZc3?eR#gx&rsz z`AzF}5@y+7dxS7}KEiSdCE`jCA2bPkLZR8Zy5#TRQ3$d?f06Rm-|R8ag?ohfr*xgD zhCSs#x?}b}2V`1{A5*4ezecw~r)@cc0`sQW`GLe;f{UFWxVZ!F8l^l;otHf)%$ElG zY!1g*|3}kRMpe~yU6tnf5`O5-@v64v5^8G7qBIf^!na(>Z)!LlhrA_RB!Qf0V-a!WEElE@F-09;P{oMkYhC>& zvy|RUEm?E5kk9$D7WwQR#46o1eWavsK&<^?BX_kJmKX>1&SxU}liFaEiINo}h+U#+ z;cD?_LDp+ZvVg$N{ELZCTg1E4j-A}x?{_NP#U$*y3n2xAqJjzA187l-wQXU^PXzDi zL<@+Uv+siy=@ECmmC8#$so)$@a$zaRDvl;tc-yi8`3l9Aj(SueRYS({^)I{uyV}ON zJlv*-^%0@3J~DUPk+9q{%U!hAHCj+W%F~C~w>VPmm!1+Dt*ii>_$Ou<-VH1_a8i`L zL^yB@0za3_KKopMBN)|3nx`I3%Lp|}q0Cbaod}i$7O_v)pkVbQ%FXXy9cvMylJ*+H zT;s2)LoBYdWTMw7s}`q!AA>E!;3PxjEQY@gMv$=Fx`RG7LXclNhpuzNM@afSas*7) zty+%AHgn`h;%C>H_iY}ObLJmj5eT5aJ-`GLeEBj=){+sbe5iJttD}|cdY;;sqf0u) zhwrs3Z>^X-`2YDsUAjeIs5d7k2Gj}JlSp@`_a2BQuGwgHPT`k#bhzDpFouy{f|8Ug z*#XQvC^mc#OQ!E}R^~}>e&%HrGh+rzqIG*{gdYAm%?W|r5ZhfU&;5dp!RGgbZ|duH zw$(uyCR!QHJ$WY-=cKueI7<&zu`b7_dhY(gWXm}0#14-*%@^l#oG5Tk%FE(t4(7hU z*I|9i?%F%#`!<9w!B6i9M{5kWZ<=NV-bt14vSuP*216^N=r#E+-?>xPRJtpayIuNNX#$JO78zj## zMKc}Tm?P;|WT4GZN4rAg!`Y`hak>K}sb4c}(j2GAbP(-O5$pYv0c7xv)Pv09mrOLQ zd5lhKf-idTQ(iJ$ZKx1Xp_$zr6mpD(v;a(v#1dI0g>U;*G=qMwy939PGt>Ma{bIdi zz$>-XlJ_Y2JB_u$%1u4MK>k?QDrPFBtYr5sO5(Om2h{Bi-ffYlhF|N@U#HHl($(A% z4!&q>9KH+{LmR7$nn27&Vo>tz1-^KIQ9TKi3cdfVRZ+I73<~vH!=Cs=yQ$%R56!kY zxVTFT?jkQs`lXi@?(uyL)5iDECFZk^&Ah(DD#tmPfK~XOMgtE0RO?iPATMvT-Epyl zQf*OKavMRD&z#rq+ONq2+pss3VxwARWO`^}4 z2V8LveX^=`Vb@wMv*Yo&)y&L5g(UvnG&+tYt=$YSfwz9rPsJeRVzIGk4{8b|Rhwc8 zdomGcS!1?MN(bbp&tHLK*u0YlmPAqCbAh`y@mJ1o)r&NFV2=NYp{9-nx%lDz9R^tr zaaI|PLnuSUSSB)i2(=$-WCfmm!od=)O}^L_Zx-Pn zbW-L{A%-~v;{u`pa!Iqjb+_4l&G9wov)9{l_gR{LrXO#*Vvb2VwbpwUH}bcIJn&mA z(al;_(hB(Qsm+Ghez!UJ?tmT}OS*9f-tKF(Z%Estce>L^yfGvgp6P-*D2%Ay`(%N} zF9j+BUS&_eZaLI-w>f-0!SKp_;v=Y;Bk9uG?wQ&!xbZWX3|I>{I#zH;Xh+XCw1$xw zB(rC>|II1aZM=d9CFU#vUxt{y?G)twHfkE7IN#7-6F8Zo_TmiXd@*-wIhv1#%No~y zQ4JYgJad-hOeIvC zz2u_#7fT3!Z(pj0OJ8n%@~87JysDo*^ZnnovK4v6xY>0+z5n6vny*o6mP+ZU(9v!a z*!T6lRl^|<#!WI44}Wr?$8}hHYYi6etjPQeH9tLwf9Lx2SG}D8QKPj+h#<@ayUr2< z9bwOJx4IWX?u4ijT|qFFRXB)E=JCqE4AgRywwau}uDmfKcr%yOW$r`iiSdJ77=lW8 zvw5gl&E*?Bggnn%LFfA(6!{8EEH+-h%;gsYRv3upTYnzBx-PZl;P!@h{CbChGQSO+ zpv(y$c6eNuX>X1N>_m`STpG<+F2)vCRvHFE-14wt)Hynqlr*Qv$OBVeRnZ?1`zcss z6Yzcb-I?#_KhQ@I)$QnQLtFxD9dB5UR}<#-pJ3+_{$GAGaRx&N7aKA#O5VgLZKs7^ zvLL-6xq#o`;QLq0;Id%+ocBro*^0T~x=uG=H_7nwSvwNk(N9XDmpzp*R@}7PHZUrH z#c+m<5>id$sjrv2d?Ogs-=i#pn7?h{4=Gvd{iP?TRNWXfK7>BMN)JdCcaZ{cGgYmN zb2eSHsqrBoEyFFC9&&j-GE=;GBS_inLmJdU+%@qGA9& z(1p-5ukmTa{HrHJ&k?CWxYBDJ6WHDiri27_N1l z^&Gul)YuTD>Jzr~eDKzuS!AS_gSd5*I=Kp&vpsUKfD)k$d9@JmahgS%AN@?H?CKlb zwp7L{x1LLRF8>^b8O9+KE-!}IW=8`oV%2IvC-Y>CQ2XK2U(~)-an!4{tKX|v-mzD0 zNJwc7vF_fgiizIjd06ZQR_lv;XlZ=Y@P1)yL&DGZL1G&Iz*e12@CTavjSB5iH1NN- zv-rAtzkQd^{fYROReAQE|0hM^vHc$Be$DH6r$XHLy68HVvvK$U7Zk&a%IXb;1jXvS zpxrl9-=p$0ZxiXNZmogSK0z}0#8eJLRzoZHxOqv93zKX0^+@3xscbF}M;|GPQFlG3 z;!qsEmuDP@9%!&N2@y8)4S06^`mWSBCp1faA5PnThIjiA1xu4OYxj;4@$^+_Hv$l# z8{uOArk!GVynHA=wr?(v0=ha}v`E0a+pBW#JSlO_PgEyvvpIdcE7`MXszXrWB51M& zQxZ2{?^P5^R$Jnm1Z;FtOr$IMhX)km;`kI~-qG!|I0l?ruN(KV0ch&@?7@ZSef+MN zOJiN|Afp}x110BS5aNx(OXlNHUt5oy0(!JMu_jSTM>Y9!#SAB(iE?PyN$|A^&46c*|` zmVi1wy8g&yTcR(YjlAm*zm^7X>>8E1lgv-?nVhe;SR`HH`}@2xMP2@kK(qTE1fiG_ zOqj!%gLr(`Tlz_?#+`(3q#=A(L8D0#jO>lB~pRC6k5%`TSfRaz&5jO1=R9B>ss?O#R7HW$izJ zgrQo3m_I-{BzX>wrD|!J{!N=fN`);*sQ_YrsFyXk-63hvjB?_f_tre4<41?p@msxA zG|fnR9fU9{+$`*kLpBPB0Ufjqh@V>wr zP!|j%FL4Y+F&(TlmCeQw%3>^lG1q89JVel+Rr#2Q428T71*`OYePS{V9Fo9xVHbo0 z;OH+CU>w8-OvBu1A|HT$K{kpZILt$^DftGMTHpdJjVdnxt{|@&U>Ph54bx0OYS5 z-$&J<)xQMEY~pFu(Ms82tdGuUMG@Szs zV4$lXh`O1Ni7#8Cic-Oa{iPqadt_0!RD**)8=E^MVsUqI?X_m-FS;xsW3yU>)=SaD=Rq4CpbYN3mx6O>Rm+Qd)+!aVe0wbnhJCCI`t^=F zln%2%@ae9L=NA(Hx|DSPp)>89-~mlBYqNPdnYU0?htHW|Q^}IJDSLoL5&+U+gE^Wz zf}}U_r- z*pjGPT-WmqD_Yah?=2b`y%i%9t)k8fX%oq}h>adGA&mR{HV8tTkIpoH8z_J9l;~N) zC#b$Y9XUsLc=6a0-Ro1MX*_>Z`dxBzPSklQnblpSf3GTsdhODqy(uw_14sYeW{R|O z01aUMa!ykuw7uuv38rm#hLiFi2Gk1Z7u*VrI6mkGYtCtiaRT{(9Qye>DXW)6SPF6> zq)bR&7tf`c7m6t*M~#T8bI-MphB^*55c$T@7pcoZy5ke!y!jS}dz8IEejQg_O|H%S; zL0h2UM7a4rx0A-NY;9E_;ns;G!s+9~mSH+kKfvC@^8T_wk>fJLFD>z?BIoB}a1J#! z)nS|xC$Lnf3>PsVW27n`2P-oYX+lUDWRpeOZlbIdH=j9wDhJ=L$N$so|7!uzDVz9) z@}HX#^qQl+o-5IMJqP*apFFTjN$J!p;&r%#r_F$4uFk_zFul}1t@D`wJdE3d)Z#Gv zrI`8jJ2jkn%34}d5X}z{M=>EvELtx0&l6~jDI=e{u+Nj+oy)!JEmHWO&Bm&qj%TOr z)S$kN$+F&^P`?1v(V2G1;qya$&pgk?aMsgYZU5yp(`9f`9!A#@aNVkON#(+k31DLI zS$I&I7zLvw*c1;jET0OL#Kuh>nnPe7ZqrXLgID;tK$g_CMdqR(p(#7>?8e;#=g-r< z;llGB;P0ev1|+IRGe#kq!Q?ZS(ehpCe5)TIU#8_wTFb}>Uy1$6E(}n^sbGR+wmUy8 zZ%;1J2EWN@yO{LvkgCvCvLria$&P3kT)r6EDXBPPl=I~cz;C^dKk%aH%ARf>ys$vRlM#Tjjw%HTHG3~;l?hpzl6i) zmhjapaLh(@@daHex&52RxWWq~AR=e)kMr(W9XeNfT7PJr%s@@^`| z%bG+nP2zaegr{9);2@$F?IS$d$GQ|4HvkWYz5u}zFks!B_f_k?L%i@G_4DBt9zL!K z@x@0}ug8g77qB=YNxQyLw=N}zjIo`az=ys;Sc6+bUKIMG#Gd48=xoOPOd)O`i^gy11AjsfBL0qQ1t35=`L?>|B4?nyxK%bzI`t@h zYllHH+0!O=Cxco*=%{n?pl|Bnbq)U)kfH`b@q5R&AqQdTO9T>QBhS6rhH@}PPjUFq zvD%6NI4U;hB>=V|6cU0Zgm1Ps7@9aj?om6m%L>9}tOcO;m8}HE$sfU9(^L$~g=L5{ z&B{ntg`9sFjh7;pNB3g63tJK*$=q3)^C5X7@RhQO%3V8D2>oT{)-~tUW3COTascdQ zlBav@JK4BEX6c~0tt0A3q2q$%D8YA@qChjTu=RU_Vaq_(Gq1#1h^tSa9z5`^8FeJ# zGA++$cV;0+VWU@ypQoEEdCO$^IXZt<5%l@6$@6%*!+vY+irN|nABZKDYA=5F`Pa(S zii;GbG5Py9ih#<=$?Ji{Uc&46aD%b0t_M$E%;eG0#}mojj%p>4M5|%)xgFLMocfk`=mY1w_QBU=VuTvEKUvp(G`W|3 zzPnv4le7<0JH%*p+WhF#(6?rqD*@zuL61rIHz%I$+!pF6(t|f`G6FrLXKS|MLP5#ZRRUH{`Bq2I*}N2Q5mMA3bbRF#Z7vA zWww^s#a&KLVsuW&O%41cds<$!oKmnaR`~(8Uuw~X4ii}kWroKEJTev8hX0kcrt+H{ zf5~pUb!ny93PoJMJY)HvW7d3T1^?1vyEs+9%DZRWVZy9!UeD0y(;!>ru{YvPuS&9< z>8E8=GU^|DLK61kw-2tUpt#e9SyZvZ3xh7*kj0Hd z01OR+yWYJzLu?el5Ki5-se>9&-SNLfwP8+3!MrG--Hu{;Pjz&uxMFgFX~Inm)S(FO zHR)_0Pyo{E)5WY09n65_8#%Vf-^w8bjQ*GQDFwUa9TLN;51n78N_l7;!y}J*O@-Hs@<MUs0=T^dqswYUz|TPHdFYUL29)iA9R_r6 zJP07wxM_P_=98EH<}+^i9st3dpOH+?7t=et+6}BJu+4(8c=Hl6;+0Gwi2?p{aV6i- z3nml_AwMIti(U3X<^iPC08#>M$FGmt!GQLqNBNpMzygjOpc_@2rS+v=R8z3pQ`XC2 zF5={+F-&=ivXvcM_HNZ1*lQOqsg3}yCqj^2`pgc~V?aKO%{OBfgjoPll`_&TsWWw> zA%7!$Z(tvGUF%Z?0cD|jsnLH~ZXV765PvT0y{%yd?nIG3tU(?0N{}K!xuAU|l~$=L zHoOw}S2F`WZm_GLXT7;k*nM#Ka^sEfK-}q^xI(HxH+j-pUFY<$n5q0Y%ryw^&$z68 z8IZOsT-B&Mksj@~8Rwi;OWmG*G(u;2>2qS$eN>H?*dgsMM}aSIj?+&Zqct_2H%!fu zJHy;3csGw0E4|PYW;(-QmGbr{x|xXs5)fnNtDB^ZS04@7^g>)qdTOyXf;ySa3nl6wluZP^EY~!TTVtNKkG8i2MwZ% z4*SPN>Z@uo(oq%x4v~#fG$mqh-2N_0c%6G|tLfpv!$*vwenGgqT^HJPy8HeWz09DB zk7yiAT-Me9kc%x*)O2Q_!|tr&;&gTNZV`fMop;PZ8^q|8D>p7yF@7$( zWe65c?~*z3X+xQxA>&-&Uqk$NmoNLov!^WA{kpUGeN2g>YbQkPxrvEPoeK5gKQr6g zaNivzKBsa8?CM1bvccwI@A)rxeqO8?zod^DNSBpg3hJ#?_Hl)b8Y92h-j+vOXj!*y z=3$0y4$ihy#(9}27bo`tL#HR2p?7+x{|xR;?`|x3Un^js15lSJ) ztjm1K{Q!kXFClO1Ul>wJ@r zsHhR)&l#mGFG`5??i>EwYbR}UjF}V;YW3{{BMBNAdqXt$2mG*+NJH#SZig`x%PCxX zzbgj~(-C$8YV0KXa9yl?XLwP!^BDHGus)R{})bzrbHIKna{CaTSdMG@GA zS1!G(xQRq32!05Rz247us6&y8)eR&flfLjAd-uN;-6hFOcXkwzqdezs{By495Z`dE zrXSi)G1b;ca9CU-e}Dh(_%W#{d$#3q_=PTE!utSw=rbla&6nk>82k5L1wuZ$jj1$w zxk-8SGeO~YBxqa4)m}a8(K!UT{$Bl+dE!O(VuXenAJZ6d#ra8H{&QPCf0rucX0ygyLi_9itdQRi*@EX_u!3wn$Z zCwT4=kH|B#AYkPOXE-$dH)sO1-q+{!&9jHFZk|yGb_xEJg&M7L|2e2KWr%(Mke3%( zl%90TRbe*zA%0g+mWL%sOE&wr*BZ-ImS!4R{O^F?%GHcN!6_l>_Q+a=+ONny`d08G zyBuRZKmG1L2`CsFsRQLk7h?uv1C0cF|5onM^jPTFWZC6fNw)QjD2e=@{Ex$~z_y+G zv8=m@*|E#jkL^^C(RohYn>D0^r~XAyIpyqaMD_7`-f6V%ze^=GX$wd2Gg(q9xFEVy z(k7tx8GiQZ1+0->PV-lr4$)wPX|5Ha4511YFHtas@!s6uzRyOwB6(48^4F- zJU@9OFRq*_@Q-FgM&gV4ZUO=h9)8Os4t9BpW|DKH87^d6tw+6evGce;UKo;VB z2-||!PuV&c+drLT0hoke1CpQ+QIV?uikGRmZ1C{gAFtEJKg#w<^|ecVi-}7k5e-;%V|%e6S4(Tl%XqBmoxzH;XL7VHXJ+`96kvxnU{yfW)mlx)|Sb0>$) zO6C$3s}$|x+OaHF5Z1}Bs>c3N%8$OG1QVrFDp@qpNzCy8Q%_WIY4{fr6rR3Q3awm{-$)h@r-tKzLTr13J@$_K?UUdR_JV8e zU9RHp%L^Y z?|+E>`*~R$T@0agHl8D>0tHzy^~Cs}Vz8}+xpv!Pwj|Qf5LAPVN3(XARvzn zdVIjo3y@9l#f5Bu7C68azp)6L62~s_FX;<>vmp%l z;6PT;WK!p8jI^mkpuz=Onn67gsA2(-?;=P3wNeMWY))_v7*hCSmA=t6YAy!fU8|q8 zl8ucSK$ZgTk7Bijf0J8YIgVYj&&b93YnFWXaD$%Y3a^#O1QIA`aJskZV!}5Ef~tF( z3~v@5Koe+es}%8TxL#F^k@D4YCnKj1^VjKK_-_NQtvw*>_3_5GnA7A(l5CCv2dWA0 zO6`X18O(-_^I7#lFGnAUsbz5y7!g1lnuJyw8n)eRBj__Qreuw){#(fmN|%ep-x3Wf zr_tmTBIetySzcz(Z~I&1S%vmYK)dVqgEX_&E_mke{Zkv{Jj|U(_3OnB2KJf*vZmum zcP-l*OuNQZ)f?+>fNqwscp^*Fof(ujrlCNrK6gwh z;@Psl4r;*d^WU5D2Pm;t-dZ>8|1sx8>1G~?Fr}tI1gR!*wMsW@?vnJL=$_Ns+e+Tj z>ho&%Qf_}#u=s#10R?)+;=Q1NcdJ$j#N^R=GYkfmUDeXgN;96q^|EuRy4ERQaW$HhTM1md&{J-ATRnRJ~`d?T0*NzlK zTPKYZ1@SqDA&oH`md@yRTkB2`q4y$aCh%iaA+ec!?$7}bnIth&&*S*|} zTCUIZwM^{tNC-X65P)5N%!1$Gw}TgK6M>F6T0kqxF&C^Y*W%Zu?$&?=j_D#pv9Ppz zpuM}N@U+8m9Mb<+0%!|Z-p>c4M#uuZUy6$~|KQ^4wEJ$Ar1E@Tz%Ya}bp6nRT`hi* zHd-w7K^!!TtVyn2JhdeL)P$X4uYx-$eO`0dQDanoLj(FD00{-UZ9E=%?JuHo3sZ(Bg>!Wvq>qp%K5DJw!Q6imi}qO z5TMmw*_gfBY5Kbpa!|yNH72L%ATna5zbOlvHNZ^^DNP1ZO23c9D*pxAb_(r1XY z5f~9aFE<|<^=6i5#W5<4CW5A+(1d+$P#yvzUVL$=-U`LmI`=D`p60cShnC<2SKKLf zkSEo==Gq^S+nT$*Oa~==phsg--09%4pjGEQ-14OU4wU8*-_%3761CFb?T|-3p5cFE zlF!+8l9dHLV_By^B;22y6SF0Q3bj83j+hzE7bLFMgp++y;tV+oS59L5N-Bl517Er4 zP;$cVzH_UERwc?3;qNzXW-<|sHvu|xB#*hJja{H^s}q&m#4PfAhQ>nAiTKdh2M#3% z#6NS>63br8PuWRzTg>VKdA6m@>oEN^i?t6cMw`!?G`d+K`kB23uNx@dzt--cCIY#G zzmHRdSHLWX6+YZGDWoYqok9z?)cI*q9yEvKPKx~ClLB2RTBq|k4_hui-P1zNDPSc5 zZTNJ2Sn#ywu3c_va1p8$L`sS|uZE~-n_S1oM7F! z02FWigfU;ee8rXh9er|Nt`%W-lk%GK`!=5P`*%ZcU;jd9CLuCfXBeyYXNHOG*8No%){si_U?vj{zQ9NZX4?)Q2arv4+f z_p%W66GW~nR@wXri-EuRhqzsV8Mc+_&DAt{=Sq=4Wf6&BHR6wGge?lEkRI{M_iAGA zde1)FA467VdQUbbSGe}Ygw5ssZj|CRyc|fjQHXvfCnF6Ht%M4kOp4f(c{(M*`;EZG#iOd|C0y44j8rVZfO(=2>0G3tbu4;|zyi zSA1XEO`;KUeeA9TUEAionQYw-Bff@ox}}YgO@A%oAoK+bNKP=tEF$YQAh*cR*`Yr* zASA>qj6gSeGkRKbcsjrRwUsf?`X3*e(gkI}>Epsi=hKS$>?w5rT$dR|#Wzqo0xg!` z_h)Rh_kg|narBVb^MULLk*n;w9+YJ<-ee*vj?j+z+_(XgmoZh|o) zh9Oy^PrbLle2O!IARNqP&VvPvM+Unzj&p4tASN1#*}#7e>Fe)z7}L}mvk%^gCL7?68bEK zyzTa{AC*}ObOSkngnMmfz7d_1cD$?<)r{wX^BSRRq{ZP2HyKntTaNKKIS-i z^`6KOKJkJY(efL5yTZX4zZ}-`YADj0d26U4mGsde-HIpwpwHm^7 zRIdCo#+76d9iAN+-QR8ZGPMk7F5r)PQo+z672Ye7xJ#Q|+d5C38pDB?p}Ia!QyA&o zs;vUsQ}bAjq7WZkC%I5*@>}yJK9Hghi{E`Zx1Yo(G!)vyyFD1J|F4#UAY<;q@JyeW zqwOZ3Bpre*W_}wCFMDadll##0nZ3HNW9B7q=ALn<2JTm-jLves!yGRsz6@HlW}jxF zZ;L%YAWU!OaE-ftthqO@^>aM@XW+DHG}VOXIZVDZiSm2gS8vdd8n|vVgSIUgJzd{V z82v%h)^9!RIdAbcRqoqioZQsLA{wqB2W6p+Vi-fphJH& zxO^J&-c(cVZ7i+nc6YFPhnTAIFt`M{cp~ym4MJY~kd^bq@caAwyX-%7tR7LDl_74+ z&EgjkW1rv2F_sphABwQ1+pT-vY#Ax)y*So#UmMb@sN=F?mQ-1t{N!rN#Qz7r-6QdR z5n*`9FNS)OrB=;@7F$8ov7-P)p$7}LQtIHfpDJVB27X#@l@P=!ie7S|0%9Feg#H69$pDo&rWn*qG=8`YcCu90lP~+_MTd{2CB)|;MlrRIy}*>$jWt3pYDVu) z9cXiKFx2#Kv07)qwE?q(Z|Tl}3oYf*LOvuW|3&ml%-Mh1y0?R@j5^ZK8cGaGsZYCK z*l*G0SV9RKc~QU8;48r@0oWJ-aZ3quJd=IeAeKQm;wtZ%qzYUffA#qnX@+%{1<*f^ zD*r@f+kLzHJu#nchE;+#!_d4Roo$H)YP!__6=y|ci-}tfwz?Eyb_V+3`?H!E4N&4* zN(pzhEoiOsWTX~7A2<92iz9)}stOI1_vn@>U?7*fp`?#1l=OYI>Bd=y|_b0FSsBDT< zhx{;SE6?ogv$gs=?=#2+#mG5juy9EK?+nL1q=_dnzSeyYP_Q&-7h&gvKmC2J=xl}7 zF`HTi(#@tNXFM`W-pWlPkZ1HGIV8H5#c@KWV3$jdf+{xR0D^HG8UD@sxh40?)`E9& z%n6Gq5`!o-rk)?Ic{U1&NM5ZStk+GflEr;ew|H=SgZ~woieR3Nd?@+#R(b?w@=mgT zAD^lIcVvkaNqix0`Tjjr-gx;w)CdenbZ)hX3}xYPV@1%VIB(^8xt@OS4PTiNrn=zgSsKK~Y%`_EatC23*X6@>@Pet$>n zWSl0Z9N`p(NYGz&5pHrnYg2d;$~0)yEKXLyDQVT8S%I_rsrtN!bDtDv*I}yc-=OTt z{l(QK(7~LQCCgc;fx5Yn8pTVX$`13!BCD7-MZ8;Wr;BSgI46YcYxgl3FY((y5K3FE zr49TPwN!o{WmT5G32ZqL7Mkyd!SXwf%*wFE`IuH{{;$ek&BmDgNT!s@rYU~KoAY#B zMWsJWfqT zv`*^)m3~2I-G1g+*dk5o3w-Il9NEO;tYr2FhsT@kJE<>N2lvB*sDjR4{lgK*O9^*P zc2(;4vvtLawbGF{UTo-m6(vvl>mCJ|F1~`(_-%yZmD;@g4^tC^OHCH!fCHF$psEc* zsZUB&^_$qmb9FC@^TTxcgWcbhJ$JbmFMo_|9g4~(l692JqPkqauAsbw&=iyV8zT0@ zMCSig#@gQ~x>{ibv(rUFL$ zxo@td`*B_A=AN@~IFOGKZ&#-*Act%8C-JGbD3xPm#}+C^%Yb8tLIo%c_NBAbmq_3~ zq4k`C6ZL1AXei>wDlhay=Bt4bt6}B??P!0R)u4qD`Ewv+Pu@y+CvqHLO@l`#b`zIN zI|EI~$vD{H80m2cm~8H2pbpv&b9hu$n2_Z{e1}`!X)aT`!^-un_>mZr5GSxLcn4QU zc~{}$CWd6m@zbPeY=&9N)H!y<8pb@TI8u{wlGKY@{hQSLeYP5m-Da^JM$s>q9E-l|P?F|2c!;U6iw5MYU55iSD< zfF%W*buNKKGQVT6-cOereomtF`ITGlYL(2{)w(*^&XFnsj5>ip?CZF&{JHCGubw_I z^!orx6gp3v)XG4A_{FJW+Kzdgu)_k_B2z>}YA8aIp8!0ld4|n2gA<6Zl_BfhnGf6JMA_!w{a*3O)j}IeD z&rdsJ18US}b>CvPFmm1~QMyy@xVP;$>=HMk{$cwg21|akeGg!WZ}XqXL7vM{)^8(X zrys(As|4_5FfBQBkjCHL4R14sgA3_H0-!9Yy=7R+p3UE~5*svFBmoRb*)PQ;V+J5v zkPY(;Z{K*->lggfq_Xl@MXq57dGi~3Y0+%`VB$2mP5RgKG;KeC4!2Ak#xE4WV6C<> z|9>!&SRAr};FAL1MW6Z-DeSdJin4kCkX=ZziX`7v*tQ&-I8%DCb4M4Z600@uDmQ;S z8fRVT&&<`Y1EYhE^3TYVuBs99La0G67kI@KGG@DoSlJ|JSBp&X5xV)dx{x6?sGWF_ zp!OC?XccwT?nDUA%P_TRJCiba{nAowBj|TIX0l58-0%g>x>0XeCO)2=$j6YVYz5l3 zsI`FFII^EABZ}V`_Fe|9pY%soKE7lw$)Q}9)R1jQHAN|}2wrZ7KE8X?6Kg2Y_Bjxq z(2u&p`EgNyTFhC&%P(ZfDXNR=>18&zjv^xDgS|6K8n^&&_i*t7rVwEW$Yb3aB7Va$ zemNF^;zV9 zEtDo(nd+jl_)-{uotF>Mk@U4id@XHre#Exm3Gwx4YvRxc+GP85>XEBCFaX5an!sc> zF4Q;Z)pNrMWX{Xk)XNwb;F$fA57rQn z9l5upZYqTjUwBtZHvokvAnb0zdzo3DHbrJm)9%&boj>wB0dpx&K04%ZD zq=~FE5xU(8C>Rab#5CXB^uu$MNId$?RDFwATQUjwL zY_m2Y40Ej3-{ysZ_6$#EQunCd(Z4dR#H^Z{O3&8+DQ( z0VQmlXQj@R=(6m`Q|CQFWyxv268R>%e}3Tm`P5JT3DL(Rl#{al4wJx=ZDFs8K_QoJ z&zqfAa(IWwmfZrW>d-c>4}9`}nl>u^$R1AL?jVQIX9T{ryN8)tUWcG`AJ2-OW()sH zc_cS?)EcoUJLAd24`Pv<<}tXr4<2H}E~7X+yw3g2I%;m`wVe50z=19)t*}}swC;w_ ztTpRSj0p>ES@?$sNq#KXs^%?}td^4)p|{-5V03_Yker^bQP9h=V?2|ECx<+E_;eYk zWj{DuJTLEmFQ98n|McnCdpwGKg+;Z=@bTDO>d;fHD1)X8(wd>v0-<$5I82HLz4lC} zz9t7jXDj-?QN06-R{nG_#ZB+ZHG2siMaU*=gW>H)#emQJdL)E+JBALjx+TD+;MVFQ z%0!~zsCZj0%^$zL1?}v(OdYLr3twNi{`zng|c`Q=^F9JQVOo2v5%w{5 zuSy=f_L{l$A-iy##@Ix-qRaG7fB$%oUZk4z^wd7FaPJ}86nM}FYxSo4g|X+=P34H& zx8z(R@(){cw6L@}>^BqaIDhKcm>8VNX+FlG%aF3YY1WE^@Nw>o&l)_FwYUn$nbUDg zMbIaFnSiHIR?&0O?wPBoS^c_m?!X?7zkHKEjuL)jR#kGVBSBq%xYB8)(jQA&fL@N&3N)0r`%)?OCVBE^t z>{*jK^1*O+RCrA4CilmX+=iI&tTr`Pu3+zeD4@giTjmhCW^uaT!s{vv?{t?Pr^XHt zvVqfht{>9xmtH^yX-w{@>N4uG;apqj*0xCv)@9IJ!;hDRt!k5ZBWC z9|OD>sR-X_ASF(mTdKI9baBHDlVok4FYqXeeO?9$SpL2qji0f(`K_+$gh2m+(ftfL zD&&68BdR7)?4{{eml>0XIG&mND7oyYa)cQE$OozfNu?^y&vuP_6OLF3#8i~Ca|prQ z7Rj|eM;<+5QN%S};Yu}ZGA2@yb+HHD7}!`T^{^^eri+YV`eeK7Y%#SOrlX#@TgO?~rK0tC7~y>rRCn@^ zBLBj%-Ih4-X#w&i2S#KxBmRr=ILD*!Y9`$#SS>(lBh~F6p$0zsNTiilirJZF9yiw) zDVE{meTRSpGxDjobg+$>D(A)%9r+!7kg}rh#B|{5uaJ+-A`Q+$(p?d!2e>;V(D`Uv zX)YfbRCr70(Z&vNM9O{e&<=d9(+zK*>rgoBT4!YbtrkV=Bw+5eA)nq>QrS)J`jd!U zEjMQ>MkCXcaC+ONdHF0#8k4;rqGd-xk|J7 zDn%dW!Snu8BG-(C`J*IVmGA*h=2$2`O+a1n@AtA4^1O@r6}E;49r%FMNNsBirCPqF zP*}cWj})@>lzZhLWHbJx$%i8JiQCLb0!ry_<{E<}3@j3k97~N?$i&u!180TNrR@P# zC7*A`FM>b3@Aa>X0;-r6Pcfg}7us)T7oL01A#NFMiMkLq%8R&BAO}==J?5deFaF=4 z9{JT4q^%YVeAtKCTxN`b54c@<@hd;%)3@4S%?|>tKTbvezX*YVDA%}3fjkt%hL92v ztsDFnPU~1HJ8AlM{bU5w1b>ZU^D?UN_4y)&KUI6S4`&czPzb8{#5%8lrLL}N_xROo za#0nw_u!BKp5g`m9Ivn^x%bR^GontMj++0prNCv+HcvP6xD$ye7d#kRx;P#_ZDcaV z#fd=>rg&Y&TfD3hDbNp`4sW%+!aBE5yehePCELKs=xUBKBv*AY%bEh#CWK5v-)!1#r{y~_xpN!@=l))d_#$?rksQuY_%XuIN;-; z`TW1|ibm8%usjc++i&p9o%Et4l~Qhb*^`1uDmH>*-f5Qc>dBs|$T;lx!l&fN(|OS7 zV}Os$g|eQpYTB>hjJ}6*T7TDWFjiH4=0Z1t#S0GgcfjP9^W%lLwS_;+SI>sdDXsep~7;-+{dS5-dL8=7>Er$dV zFTa@INI`)qz$w?iDzBM5dhaNef3;Ku%|kNfwz1M3`R6;kDj0i?YOzQn&sKWTK3}S6 z0RC*o(-Fll{{{Fxp3F4S-34iudAa_Pf>XT68iC0mf#FgA3VJdhaY3RdODI5&-=+@} zEOGn<$n-maRoJ?^1K^719CmUlpJIz^U{{@#Ac2v$2RFN@;2MOW^yBk!2LbLLN9Y5{ zGexjRS8nos!2c~M2Iy=tC~_=ug}u_-0Ydgv34IseKRAs)Z*Pe2xUSaA&JCTDcC{9| zd)u3m{^T{{<9~f6j)jNX-5lh0>cGTW=M!OCn2?8Y2ua zoOD^rYyW!u&8y~D*VuPzr^`~dTO1(~J+tSvGTwU&c-rR}D&vzSj|5iipY{PdCM>kP>=4qBTCPsElGfGOwXQdiy%ZoB0^TSWt z_OCG$6Uh{)r(Ikewzr0BBEuO6x7YCo$55_b4LDw67i? zy5Jc6>nB46zD>Lu{Ixn_vRc>kO+i;R>Z4g`Zbl|v+lldKB_t2HpE*L?@b@cf4R(Yr zMil4azN0X{jGmS-L+>$+#=S2f7#_Mk;Vc@#7FvRqzoBT`cCbBct2Ww zyelP=@!xvWyxz<$_+fLO5V%Lo$nK+)(ct?yCHj(#vY z>OT*c54S?wbp)sP>A-h2rT;a~viM5=)apO`G2CS70SWLx4pZ%AS$B=r>W|}JeSFg| z`{s8&3Zn*}oH>ny5-A_oUt99wO|dJZA0mV5!*;Xz^KEMGdFj!5Zy?^wU?fq~TPO4+ z(e*#u<+(0i49RUxA+(QnFvC8Uy~-?qAdAa34KKiG>n+aORD$5P;nnz_-w6G8mK(GQN z&8}w^x?C=tM_ekn>N%ohnUUZ4O=$=E%Q{!9;FZu>Nw>#meJV`scKvFR))d$gDEQ82 z;Ulmp3u~(k7B6%4=k-|-E}->i>ylg&b$bDEJ)UcPQ37CHz()4R*w70`{S80F+wA0K zAgiW`6<<1sha=<@cntNtd^BSKNHX2ixV`g}H+y9zsnJqam%LKguOCkhXki-oQeJqs z#|)?0rU-2}eD4k|iTMaAEo8Br+X-YQ;86mfU%1cbwW80V^YLkZ^zvzOq>AXhu-wjh z+w5Qff6KQ8M0*K;G}foe#Et_$0K4HXd~2RQsVk$HML9gv{(u-C?k*U z2Ymp(C+!n#U=O!xiz-fUO3EYwUw^*okf@ z2CY8Zbw;_xbBrZUMFuLxLJS7)OHp7)$IiO&6Z~Yptv#aVD=TX=EbQ|L`7ZfCk8^?g z3bvRH@cVBnwhwth{nSa`-s%sKl!}KteVzS>b?q!a`7*b|cc5slKB2{6XUGvG4qw09?q*Z%#-r{QyQs0t*|C|1iOE zq14Lbm7qer?t) zq!lazbZ<#9rN%EDv3qQ=1S5g3CP<#d3q;1dF7f&j)w(#amC-mIm&8kR6FdQqNWhT1 zsRjN>ngIqIGecd;d|4-qbY4)*2^MhEAk;m|JYeXkNxR!|mA%5QJu1&VJCS`MrXj{O zC(Ut|(icIr_nK+xgDe2)^s||G*a$&1>z(hdG@1*3BL?bYDaiMqG1h|eQOh5qGvNW2 zvy_;xoxU4h8#(T%ijK*y^sSZZuHot;VI;5ITBzD|=xNPU`VBf%G8~n=BI<6gzSm#A zPvU*+1c3GjP$qQJE3#~fKSUP!8&>2m5+;US&3U99^BWNF~|8APoT0S2Df> zc8Dri-?YC+8c+APbEN+)dolhcq3$|Vf1i&Vob1XFZ)#ftq|VUvQeqoXLYa1J{R?iD=OvA6LzI73D64rx|IA(Py;-HP%~WF(y9(iBaicx$ zFX#u%Fl*T7w6gpr&}rc;afUZfMz9S^{`D$VYHbd^HpPeXtBGNKCA0Plc<0hAsreeG zKQ=3z=RsPkTXL}TW2;$%TEe<{CZs0pKy`qGPa~KoI8~|)hJ~xkze}uU2KA87Z-bt- zx^F%be2KM*8(QCk(k4TqLSwuExd2{zOAawmPY;;dSE0m!?I_DUM8@$Pu${bmU*W#` zH+Ow+Ek)AEivW?MUn|XHfyd8E@RiI<$#Qz~NlYO&U`cGmSRr#B5gO6``L42-r{z@d zgSQzeVq41#Ro}1^zx8fEI}lGGP^e&KW^V@&GCmi{0PFMxE9{Z{=6dT!wrS~w7sG`f zAgWUmB`V$rlg{`q+L$!h;Q%1nk>l6T-j|(TdcP4SWI5CRd$$FZF_x4y!g>s|j12uh zLIeZ)x;~M0eqGRX@6`L#+dIp~DiXIi!iI^-F=SlSqWzl=tE{wOrQ_i)gbeLmR(cHk z4GY8FwMC$h%eJVoEF;CQIA1EeEew=gRGBYRWUuImC3EK9zm<{Yj}!%lTj+^=Pc{TO z^Q(CUcM-BOP{TB(Tr9D=H1H8Mn=|5x$7yy}q}RdKQ+{v zMD$Ip!)eg3ydS&%lFQNdc4uKCd2&Y__ipHP)V|p2nT6P5ony14dGU!{|F(S$>1=18 zLUM(--NlzT_!pwcFr`rU-sm|e0+S4&wo7T01=@fPtwRb-xmBGNlPrg?8zM2+pHphG zY6j3g@4Ved%1Tnw44~KVVv-fBHccQfo)o5RqewQZiVrU;DkzeqNfL_MO(57BxB+rU zv`o;py!C~Te=T0-cilg!{lQ&`a+WX$$az3ahFU3egkoGLVEHJjnDt$aM-){1-?iCl z%PRG7MBuW!#q`1B|LJH{p-iDOqj+oBi!1 zl6R6;ehS0w%oD$x~)HJ0a}+o}VeU6rnMvsIQ~`myG2!cu{5V~09*M;C+CNV+V4 zKu?H`;ExX$`uI5MQF7{<$P$P?Y(#E^a^n~!hot1~uOeP*iqZoWB7@v>G&U@Q5Wz*0=7BR7$#mnI}FQX_Y9qi^t1>!A; zbzp=XuEcM5A6igL%Md=Rk0@sP3|TV4Sc(&8z{c=2(iZZG-T1kfh|(&iC%xv-Huo6-5y%vrncYcfdWoP-dl^a z&@}Yt;frTU(l8`49SEDg?9>|Ahj{5%C5@Gc?>W#GF(<;fUc16YKcF8XR{t&2iXGG& ztOD=iGjoRlhBrQt3B3-br_I`GWush-`*)3&!@~5}ggBHmludAP{c82NT&W9nSVTNM z{rC*TSeE?nA>&`XX{sJ<+IHKbjQM;z&@A*;>cJ%c z(*hKub%fQu`0hr+ErSm))4F!G#I%FY8`J1O2gR5Sgvec{pU+3k_JPXCRuuW(8OpFR z;}1%sbwaS98HMMG!Z^$JG(T|ZhD1>nPBT;8o=bO&W^DV4o!pG-AUv#R<&VsLR!5Ly z6~3a%nai-z3@@i**xTT8J(rdf#- ztim=Sa>;zPCg#S2!+&@Y3-oSgqGkYki1o4Kqi7CkbMgXdqq|oh(6S8(nhB}K3egzu zl9Z^Dy3R?J#-9g(<_(l}zbz!eC~%O6YdTqlT1kqm%bpw8{l`V?TkSp4t4>YUVlhu4 zx@^K3TnoIety{7tspEjAelS0fz<=)lZw{H2=;SBOC3qOYg z^NJmvR8s(q3!N@d%Vj6BJ;!w*kpgQ5tYpSHne(i6A0S=Lf_fSJuE+0D5P(coB0|budpdZ5w*<(v zR#Ms6x`qQ6|$rYG?#zv6hx8FGCw@j;zf}v=V*UC?$Yn8oJ>aE>j&#Nfr5q{LKVDJ%*nrg+hI06 z3midHGA63>ZO(`SQ$`+W!oWS(1-9bj=gAc2OB#OW%0M@R)5K(@^54+L;(;UEPwA<{ zMQi%>^fa$TGud%+#t!m)^uP9@;AfD(&7dRoTghCB6rE@&tc&wVO6s@cXecOv4|5KT z*n2`w!R|=G+wK^h={))nOqb%D0l#I)wR+$nvNd#RjT0phfU>nA$1kf81ow_O=IsoF z3i@{s(Qjn@P+J=vq};3GGoib8e#ht9IJ`2e98AphDsi4nEJX6;sovNW1-?S@bcDh84nEm!g;?xrA$B+YM<8rR4wykK zoUwphboQcHYo{qvAB|neAe)JTi?X0)w_i~NG||sZPRJXv#H$`R#okjTcdC|}Z=h`* z7)d|MxqPTavL-Mbug^QulLvz7q^Gf=PhD>tu?c+)?nES)RD{lWho3tjW#tgqtjYHJ zH1Hl8a)fvU;)%*vG`u%t=rZ}IyR^MM4mxB3#TQdK zXau1#Y?O%LT}wf<-_cwgm|bGBkKaZ!MF7Pw_$VNhbv1FDyPENGEIHKOf-_zNxqXJg zrSdGETXgGJF#Hy1>kUR1Jqnr{L-U%G0AJjQjo&^Jnzd4VB@a-o_gA%G*Evi)#+bd& z;Kr?3AnDLU_>S5-y@P?Bn(31X_a;9bwi-2pp^`CUm52WpKU)|fS=adbmeJYl^9}Kf zA|jh5Oj#gwA}Y(?Eu&!UuEYJqB=Xm<6qMHu2wGq-kouuT$6g)tA0GE#4@PHm{f)#y zX>7dy?n0o%i;3Q?Rsiy)uW){#A?8Tbo4EXhhXe7WR98P)tt<`QO(b#cm{ za~KIBCq75Z4zns0Uji7s+*8d$Qr+rK8A^#y&&IR09#uf+H zD!Abg&?o|2L;5ICTc|Y?Jx;a8Xs)0sH`FhR5W{E%qr&hrkSy$6J5`xZE@=;zH9J?H zx5vk@F#wN4Ftc<0fU0OGSMdRicqpd@iei`Q1CMzDOyA)y5GiwaXJq#8H)YW}x(&au zR)2_1L3H4-eR|22wgakq&@Pax{&+i!nc-o@PLUk)(Z_#{9Xq=KA!U5xP&Md-u$CZjupA(D9Wf&@LqZYXvW4yO!G(EWr48F2hJ(REbP;h z-~QU4)P*8=*E!Kjl*g01xs_j-w?Ib1H14P7vhLM<-u|{?WWi?Mhg3LBNmHHwT!C(& z`xH-mJ0mTwC=ycjm_ZdCw;d?SkME6RZ&uj9&xwz8%GGlOB{*)g9coT>5{i_bjQz8W zFS<2W4|~u_G-9VXn?{$VH`VUg16z0fysd&FOJ-k zQaSO9Fvvb1?GjSK0fn4Gw$r_KjvK+szQXy)q%}A4f%GrDVuJzMfb=YFOfgL~6vi z9*7H;wIlDmC=hG4YSP6Uk3S1$0IscDmB^T%JfM>pMLNTjNT54dm1&BgcA*AHg>(N% zwu#XCk+3BdY~u!1Qr(lTvqvT6?c4Ql5!Qck%26`0U6Rb1JwkV zkrzsQ1#|Nd@Xvd->`Bx(Xio`ccZ0ocV5dG7tMA23!_r@Znyz-9DhdQ_psBQv-_#$h zLIncNH()SMbyqmR>remw0x1?K%{xH81iRd5Y?;m;SVG>217o|kMm~VjV2GkV#9~kk znqulGhZD{K)&N6WJ(#6Wf;pu-&8kmv7s%!_!90ulsWm!`zHT702PdESH-)aA9XuTo z>h_Olv0eTk9=asr4Hq%}C0)Y_jp_xDbT@Yw6bPqr+tKipjLnfb7s;u{zm~KELHf2S zvtj0@F$wwHURlQ!?(fSx7+E|PKt9}A5;fYXOcmMDJ6W>|7%lf4#{XvfG4g(n<$o*`ouCspfmBc=6o5M6>QILBGuQQbU zD3_xLYNaW@SJqKUAGcy9wC4ujc>Y#hZuuX}e}x7)=pWnn2rZr1!}86wDY9D$9X;oTVEw*Gl+&C_w%56z2_K z0?B3d+tBZ7?|?!aMBkzNpF;xzeva12Y|nNfF&=_tRJbmL2|H;kyBcX*r|sH&a~@j} zG?;Rgmj)Kp-WDgcm%RU))pAYK7-7yNmI%|58 z)KBp^B7QGL2G8AeuxXcjPbbv~KkR2zx}TMnqK=LdQo0uTVBUY4bZu&ifD}jkOPbb311baWfDxFUyw!hy&{yZTHzrMlQ#qdy}ZPzC=6=cg?U3{hV8M9#pM zwpN_X59uS~&ptu_fL^?uS!J}l zs~z}%x{*|VdUmZ5@k@1n1&rS`T0 zkej*oRrJ&SCtb*?Hr#<7&!oy6Vfky}-salntc@Ec;PC>1cZE~Dl{Nb{>NgxNM>-?U zOghA-zMsZl6&MoOKJJYzP||$;Zq(7Cw}T&GD0#k_mqChb)ii6U&{CI*MSJLGxGSjDh$@AX9!=6yR%lzqJ z$TxsdVg?fg6Bn1V==_(^&xQw}&y3~p=J)zu3zyY+N1uIWq4}^qk2|aH?*Cx9)=2D^ zkCuLg3^uCK|GTWeoItGuxCO{7l_t(9O&3R>y5@zjCbXy0c(fZ z3=%%>0(0<`MUU1NtZs=@xDrnQNE^nSZn#@YbfSP_wspY~X0LEB0dhAE`;p<-o{*G` zo2y}^CC!lhX$RR}&(mAV#?uqp6Q#7|6JQhTH0^ErzWA{U0l-{NL|T2J%_`sIIlW+D zx)`59YONW>FXjrB+kb#Kzk7qR)qIl<&ER!f>xEj`qUZbZ4l3dKppQL@1r(SXaS