From 0cd71c8fcc23ce3bf39a9fa0db7e3d23328c3232 Mon Sep 17 00:00:00 2001 From: Bhabani Prasad Patel Date: Thu, 27 May 2021 02:12:22 +0530 Subject: [PATCH] code commit for BAEL-4869 --- .../config/MaxHTTPHeaderSizeConfig.java | 15 ++++++ .../MaxHttpHeaderSizeController.java | 17 ++++++ ...tpHeaderSizeControllerIntegrationTest.java | 48 +++++++++++++++++ .../MaxHttpHeaderSizeControllerLiveTest.java | 53 +++++++++++++++++++ .../test/resources/randomSringForheader.txt | 1 + 5 files changed, 134 insertions(+) create mode 100644 spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MaxHTTPHeaderSizeConfig.java create mode 100644 spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MaxHttpHeaderSizeController.java create mode 100644 spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerIntegrationTest.java create mode 100644 spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerLiveTest.java create mode 100644 spring-boot-modules/spring-boot-runtime/src/test/resources/randomSringForheader.txt diff --git a/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MaxHTTPHeaderSizeConfig.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MaxHTTPHeaderSizeConfig.java new file mode 100644 index 0000000000..5a928d8935 --- /dev/null +++ b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MaxHTTPHeaderSizeConfig.java @@ -0,0 +1,15 @@ +package com.baeldung.sampleapp.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +@ComponentScan({ "com.baeldung.sampleapp.web" }) +public class MaxHTTPHeaderSizeConfig implements WebMvcConfigurer { + + public MaxHTTPHeaderSizeConfig() { + super(); + } + +} diff --git a/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MaxHttpHeaderSizeController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MaxHttpHeaderSizeController.java new file mode 100644 index 0000000000..16ee4515a5 --- /dev/null +++ b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MaxHttpHeaderSizeController.java @@ -0,0 +1,17 @@ +package com.baeldung.sampleapp.web.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value = "/request-header-test") +public class MaxHttpHeaderSizeController { + + @GetMapping + public boolean testMaxHTTPHeaderSize(@RequestHeader(value = "token") String token) { + return true; + } + +} diff --git a/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerIntegrationTest.java b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerIntegrationTest.java new file mode 100644 index 0000000000..209e5497c4 --- /dev/null +++ b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerIntegrationTest.java @@ -0,0 +1,48 @@ +package com.baeldung.web.controller; + +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import com.baeldung.sampleapp.config.WebConfig; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = WebConfig.class) +@WebAppConfiguration +public class MaxHttpHeaderSizeControllerIntegrationTest { + + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext webApplicationContext; + + @Before + public void setUp() { + mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); + } + + @Test + public void givenTokenWithLessThan8KBLegth_whenSendGetRequest_thenReturnsOK() throws Exception { + mockMvc.perform(get("/request-header-test").contentType(MediaType.APPLICATION_JSON_VALUE) + .with(httpBasic("user", "password")).header("token", "token")).andExpect(status().isOk()); + } + + @Test + public void givenTokenIsMissingInHeade_whenSendGetRequest_thenThrowsBadRequest() throws Exception { + mockMvc.perform(get("/request-header-test").contentType(MediaType.APPLICATION_JSON_VALUE) + .with(httpBasic("user", "password"))).andExpect(status().isBadRequest()); + } + +} diff --git a/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerLiveTest.java b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerLiveTest.java new file mode 100644 index 0000000000..14e1913082 --- /dev/null +++ b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerLiveTest.java @@ -0,0 +1,53 @@ +package com.baeldung.web.controller; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestTemplate; + +import com.baeldung.sampleapp.config.MaxHTTPHeaderSizeConfig; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { MaxHTTPHeaderSizeConfig.class }, loader = AnnotationConfigContextLoader.class) +@ActiveProfiles("test") +// Start MaxHttpHeaderSizeController Spring Boot App(MainApplication) first +public class MaxHttpHeaderSizeControllerLiveTest { + + @Test(expected = HttpClientErrorException.class) + public void givenTokenWithGreaterThan8KBLegth_whenSendGetRequest_thenThrowsBadRequest() throws Exception { + final String url = "http://localhost:8080/request-header-test"; + HttpHeaders headers = new HttpHeaders(); + headers.set("token", readRandomStringFromFile()); + + HttpEntity entity = new HttpEntity(headers); + final ResponseEntity response = new RestTemplate().exchange(url, HttpMethod.GET, entity, String.class); + } + + static String readRandomStringFromFile() throws IOException { + BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/randomSringForheader.txt")); + StringBuilder stringBuilder = new StringBuilder(); + String line = null; + String ls = System.getProperty("line.separator"); + while ((line = reader.readLine()) != null) { + stringBuilder.append(line); + stringBuilder.append(ls); + } + stringBuilder.deleteCharAt(stringBuilder.length() - 1); + reader.close(); + String content = stringBuilder.toString(); + return content; + } + +} diff --git a/spring-boot-modules/spring-boot-runtime/src/test/resources/randomSringForheader.txt b/spring-boot-modules/spring-boot-runtime/src/test/resources/randomSringForheader.txt new file mode 100644 index 0000000000..444be3479e --- /dev/null +++ b/spring-boot-modules/spring-boot-runtime/src/test/resources/randomSringForheader.txt @@ -0,0 +1 @@ +eyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxg \ No newline at end of file