From e2806349e2dc5d20143e3b2b7ca106b168949ce4 Mon Sep 17 00:00:00 2001 From: Andrew Westberg Date: Wed, 24 Sep 2025 21:00:37 +0000 Subject: [PATCH] fix(newm-chain): STUD-499 newm-chain hang in kogmios shutdown --- .github/workflows/ktlint.yml | 2 +- build.gradle.kts | 19 +----------------- buildSrc/src/main/kotlin/Versions.kt | 18 ++++++++--------- gradle/wrapper/gradle-wrapper.jar | Bin 43705 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 4 ++-- gradlew.bat | 4 ++-- src/main/kotlin/io/newm/kogmios/ClientImpl.kt | 2 -- .../protocols/txsubmit/TxSubmitTest.kt | 8 ++++++-- 9 files changed, 22 insertions(+), 37 deletions(-) diff --git a/.github/workflows/ktlint.yml b/.github/workflows/ktlint.yml index 60ee525..429469a 100644 --- a/.github/workflows/ktlint.yml +++ b/.github/workflows/ktlint.yml @@ -17,7 +17,7 @@ jobs: distribution: 'zulu' java-version: '21' - run: | - curl -sSLO https://github.com/pinterest/ktlint/releases/download/1.6.0/ktlint && chmod a+x ktlint && sudo mv ktlint /usr/local/bin/ + curl -sSLO https://github.com/pinterest/ktlint/releases/download/1.7.1/ktlint && chmod a+x ktlint && sudo mv ktlint /usr/local/bin/ - name: run ktlint run: | ktlint --reporter=checkstyle,output=build/ktlint-report.xml diff --git a/build.gradle.kts b/build.gradle.kts index c2362ae..58e66cc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ plugins { } group = "io.newm" -version = "2.5.1-SNAPSHOT" +version = "2.6.0-SNAPSHOT" java.sourceCompatibility = JavaVersion.VERSION_21 java.targetCompatibility = JavaVersion.VERSION_21 @@ -101,26 +101,9 @@ tasks.withType { } tasks.withType { -// Example 1: reject all non stable versions - rejectVersionIf { - isNonStable(candidate.version) - } - -// Example 2: disallow release candidates as upgradable versions from stable versions rejectVersionIf { isNonStable(candidate.version) && !isNonStable(currentVersion) } - -// Example 3: using the full syntax - resolutionStrategy { - componentSelection { - all { - if (isNonStable(candidate.version) && !isNonStable(currentVersion)) { - reject("Release candidate") - } - } - } - } } project.tasks.withType().configureEach { diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 47ba66f..4d21e4c 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -2,16 +2,16 @@ object Versions { const val COMMONS_LOGGING = "1.3.5" const val COMMONS_NUMBERS = "1.2" const val COROUTINES = "1.10.2" - const val GOOGLE_TRUTH = "1.4.4" - const val JUNIT = "5.13.3" - const val JUNIT_PLATFORM = "1.13.3" - const val KOTLIN = "2.2.0" + const val GOOGLE_TRUTH = "1.4.5" + const val JUNIT = "5.13.4" + const val JUNIT_PLATFORM = "1.13.4" + const val KOTLIN = "2.2.20" const val KOTLINX_SERIALIZATION = "1.9.0" - const val KTLINT = "1.6.0" - const val KTLINT_PLUGIN = "13.0.0" - const val KTOR = "3.2.2" + const val KTLINT = "1.7.1" + const val KTLINT_PLUGIN = "13.1.0" + const val KTOR = "3.3.0" const val LOGBACK = "1.5.18" - const val MOCKK = "1.14.4" + const val MOCKK = "1.14.5" const val MAVEN_PUBLISH = "0.34.0" - const val VERSIONS_PLUGIN = "0.52.0" + const val VERSIONS_PLUGIN = "0.53.0" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 9bbc975c742b298b441bfb90dbc124400a3751b9..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch delta 642 zcmdmamFde>rVZJA^}0Q$xegf!xPEW^+5YDM%iT2bEgct9o+jH~+sJas#HZ=szO|** z=Pj=X_vx?W&DSwKck|WWn~hffsvnQ+42*W$b7b0$SCcOoZ`{W{^$^pk;4>8-A*-)$ z?n(Po`1$6Jn_u?t-L+tsPyZ2#X}8T6OS8pAU;kdgd+_Hw4z4TW0p9E!T+=f7-c&O% zFic^X{7^$?^Ho04eona9n#mGMxKhA=~8B%JN`M zMhm5wc-2v)$``sY$!Q`9xiU@DhI73ZxiGEKg>yIPs)NmWwMdF-ngLXpZSqV5ez36n zVkxF2rjrjWR+_xr6e6@_u@s~2uv{9vi*1pj2)BjFD+-%@&pRVP1f{O1glxTOp2-62Ph;v z`N1+vCd)9ea)af*Ol1*JCfnp$%Uu}%OuoN7g2}3C@`L5FlP#(sA=|h@iixuZC?qp^ z=L$=v$ZoI}|87Wh=&h7udff{aieKr*l+zDp?pf)_bbRvUf>kn;HCDMXNlgbbo!QRK I1x7am0No)LiU0rr delta 584 zcmexzm1*ZyrVZJAexH5Moc8h7)w{^+t*dqJ%=yhh23L$9JpFV=_k`zJ-?Q4DI*eSe z+ES)HSrVnWLtJ&)lO%hRkV9zl5qqWRt0e;bb zPPo`)y?HTAyZI&u&X<|2$FDHCf4;!v8}p=?Tm`^F0`u(|1ttf~&t$qP3KUSD>@TJQ zRwJ}Pim6NzEc8KA6)e;S6gs8=7IIL8sQL*MYEuRYO;Uj<%3UbMbV&^&!Zvx+LKmjT z8Zch6rYP7Tw?$Hn(UTJwWiS=$f{lB(C=e*%usDV})0AQIK~sat=ND@+Gg*Pyij!rR z*fa02W|%BsV++>4W{DKDGSIUEHd2$P+8ct!RF+CHDowUuTEZOZ%rJSQv*qOXOSPDN zT|sP-$p*_3ncsWB*qoD7JQcyZ9xan%cJP6Tb4-?AZpr*F6v98hoNaPJm@HV`yya5N z))6pqFXn@}P(3T0nEzM8*c_9KtE9o|_pFd&K35GBXP^9Kg(b6GH-z8S4GDzIl~T+b zdLd#meKKHu$5u))8cu$=GKINkGDPOUD)!0$C(BH(U!}!-e;Q0ok8Sc?V1zRO04>ts AA^-pY diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d4081da..2e11132 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index faf9300..23d15a9 100755 --- a/gradlew +++ b/gradlew @@ -114,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9b42019..5eed7ee 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/src/main/kotlin/io/newm/kogmios/ClientImpl.kt b/src/main/kotlin/io/newm/kogmios/ClientImpl.kt index b3bc7d0..5bc2762 100644 --- a/src/main/kotlin/io/newm/kogmios/ClientImpl.kt +++ b/src/main/kotlin/io/newm/kogmios/ClientImpl.kt @@ -728,9 +728,7 @@ internal class ClientImpl( isClosing = true log.debug("Closing WebSocket...") session.close(CloseReason(CloseReason.Codes.NORMAL, "Ok")) - receiveClose.await() sendQueue.close() - sendClose.await() httpClient.close() } isConnected = false diff --git a/src/test/kotlin/io/newm/kogmios/protocols/txsubmit/TxSubmitTest.kt b/src/test/kotlin/io/newm/kogmios/protocols/txsubmit/TxSubmitTest.kt index a051844..7da0b64 100644 --- a/src/test/kotlin/io/newm/kogmios/protocols/txsubmit/TxSubmitTest.kt +++ b/src/test/kotlin/io/newm/kogmios/protocols/txsubmit/TxSubmitTest.kt @@ -93,8 +93,12 @@ class TxSubmitTest { client.evaluate( // working // "84aa0081825820292f43ca3da4026c7b7d70267adb3d20e494fdb65751dcddddfc1252c4fb995c000d81825820f748cf7fa087e4f7252789e6c4954903d37eff007578b937b65e7603c26071bb0112828258207641e0d3e0abdea6ea4f5f8c9aefd3194d0f907207f6c8a119c0ac4656b0a23f00825820948046a408a3c35d8b482cbe622e9ac632b49f49280d680b114cdbf3562a0f71010182a300581d700e70594d46a226aa08a3351b1e71ca44e51ef5cd5e6ada385831badd01821a0014524ea1581ca95dbc93ec0bf7b3ecec07742372fb2bd0084acdf9615e96c5ce21f7a15820ca11ab1e00305f4f71a0ca0c680c4f8ae17222abfefff7c5b5b2ece1b1deb64001028201d818581cd8799f1879d8799f1b0000018d48374c001b0000018d61f71800ffff82581d60a91113cbeb8c42e56a66ebdb492be53909aaab740387e37cdf1c6b7f1a0119799f1082581d60a91113cbeb8c42e56a66ebdb492be53909aaab740387e37cdf1c6b7f1a004739a3111a0005119d021a000361130e83581c3ae131d72082b2be2b7f7eae7b1c54eb914a5679e87aec20983079a6581c77f07a29d7f2efd2f5d697886620e2c409f110df8d9f2bedadf898d9581ca91113cbeb8c42e56a66ebdb492be53909aaab740387e37cdf1c6b7f09a1581ca95dbc93ec0bf7b3ecec07742372fb2bd0084acdf9615e96c5ce21f7a15820ca11ab1e00305f4f71a0ca0c680c4f8ae17222abfefff7c5b5b2ece1b1deb640010b582027da63c9cc30e891bc5a90a2da58f6c4030de282ed06bf3547ee01a8f22a072ea20083825820a7f12998639de2ad89851710b0c4f3307b774056d851cf6ba1698ee27574a7905840ca4a742e40719db255bb34114cd5694a0a0f1b4d368bff65fdb87f340951a5411944aef032e775affb46afe34ec93fa5709e0b1bc464ee1d5df72299445a2a0f8258204d991397c2751adca62eb18a8b3de3959314135e6442dc89f346bd40aa32e89958406f47d2b81bcd4fdb5a8c3d1a7e1e3a12d6a57677d54d66b091da66f650aa1493ec8f03e24113b92952fb7c905dccf2f11fb9fe2aa5a5980f25dbd2877f6a0d098258201917d87ffec739f20d586a128a6d787198c5da11b44015a71c62c88fa628f8f258404717c2e533ceba6980244aa700ea38ea9fc27f0b245535348b243fd7a9b331a9f062d65bd0c0b2ab7bb7478596cdcc2fc0163a072c48601043bc0f99942d250e0581840100d87980821a00028b4d1a03ada6b2f5f6", - // broken - "84aa008182582034d18219c730a6984d80f24b9221517d2fecf08dec0376b9bad55174098e039c000182a300581d700e70594d46a226aa08a3351b1e71ca44e51ef5cd5e6ada385831badd01821a0013bac8a1581ca95dbc93ec0bf7b3ecec07742372fb2bd0084acdf9615e96c5ce21f7a15820ca11ab1e00305f4f71a0ca0c680c4f8ae17222abfefff7c5b5b2ece1b1deb64001028201d818581ad87982187bd879821b0000018d7bb6e4001b0000018d9576b000a200581d60e32a130a38872f9de02a598386da90ae91520918ce3c59a9dac83f96011a0396af98021a002dc6c009a1581ca95dbc93ec0bf7b3ecec07742372fb2bd0084acdf9615e96c5ce21f7a15820ca11ab1e00305f4f71a0ca0c680c4f8ae17222abfefff7c5b5b2ece1b1deb640010b5820c8e18324ccf9abfedcde1de2923366c6b09cfb37dc74e4e6b5448f35c670b5680d81825820f748cf7fa087e4f7252789e6c4954903d37eff007578b937b65e7603c26071bb010e81581c3ae131d72082b2be2b7f7eae7b1c54eb914a5679e87aec20983079a610a200581d6077f07a29d7f2efd2f5d697886620e2c409f110df8d9f2bedadf898d9011a000f4240111a003d090012828258207641e0d3e0abdea6ea4f5f8c9aefd3194d0f907207f6c8a119c0ac4656b0a23f00825820948046a408a3c35d8b482cbe622e9ac632b49f49280d680b114cdbf3562a0f7101a20083825820a7f12998639de2ad89851710b0c4f3307b774056d851cf6ba1698ee27574a7905840d3f6c099bd6e2ce0da571f2fb0fd84be31ea79e933b2718816856ef2a8bfc3eb63a162ae1074fd33ac281a5406e1d7106dc684601181d33f6fcecb1fb50499088258204d1ff441ae2bad05f39a8a2419beb89ad70dea555c17d0d5ba11a9e1dab6a0a15840200591ab8abc802418457782f3a2da4010d35d074eb74e2674dca91ec019fb6ee9515651dff1e932d47c0778662d101216d71b2a72df69a73f5ed3e1c14beb098258204d991397c2751adca62eb18a8b3de3959314135e6442dc89f346bd40aa32e8995840dcf418d7425545e8ba9660671289bd03f40874a0fdf2c6f4f62278c175582c6bfed3b2330092dc2a1d66cb00d1caf4f0b64a05de1da554262dc2f8b8f52dea060581840100d87980821a00d59f801b00000002540be400f5f6", +// // broken +// "84aa008182582034d18219c730a6984d80f24b9221517d2fecf08dec0376b9bad55174098e039c000182a300581d700e70594d46a226aa08a3351b1e71ca44e51ef5cd5e6ada385831badd01821a0013bac8a1581ca95dbc93ec0bf7b3ecec07742372fb2bd0084acdf9615e96c5ce21f7a15820ca11ab1e00305f4f71a0ca0c680c4f8ae17222abfefff7c5b5b2ece1b1deb64001028201d818581ad87982187bd879821b0000018d7bb6e4001b0000018d9576b000a200581d60e32a130a38872f9de02a598386da90ae91520918ce3c59a9dac83f96011a0396af98021a002dc6c009a1581ca95dbc93ec0bf7b3ecec07742372fb2bd0084acdf9615e96c5ce21f7a15820ca11ab1e00305f4f71a0ca0c680c4f8ae17222abfefff7c5b5b2ece1b1deb640010b5820c8e18324ccf9abfedcde1de2923366c6b09cfb37dc74e4e6b5448f35c670b5680d81825820f748cf7fa087e4f7252789e6c4954903d37eff007578b937b65e7603c26071bb010e81581c3ae131d72082b2be2b7f7eae7b1c54eb914a5679e87aec20983079a610a200581d6077f07a29d7f2efd2f5d697886620e2c409f110df8d9f2bedadf898d9011a000f4240111a003d090012828258207641e0d3e0abdea6ea4f5f8c9aefd3194d0f907207f6c8a119c0ac4656b0a23f00825820948046a408a3c35d8b482cbe622e9ac632b49f49280d680b114cdbf3562a0f7101a20083825820a7f12998639de2ad89851710b0c4f3307b774056d851cf6ba1698ee27574a7905840d3f6c099bd6e2ce0da571f2fb0fd84be31ea79e933b2718816856ef2a8bfc3eb63a162ae1074fd33ac281a5406e1d7106dc684601181d33f6fcecb1fb50499088258204d1ff441ae2bad05f39a8a2419beb89ad70dea555c17d0d5ba11a9e1dab6a0a15840200591ab8abc802418457782f3a2da4010d35d074eb74e2674dca91ec019fb6ee9515651dff1e932d47c0778662d101216d71b2a72df69a73f5ed3e1c14beb098258204d991397c2751adca62eb18a8b3de3959314135e6442dc89f346bd40aa32e8995840dcf418d7425545e8ba9660671289bd03f40874a0fdf2c6f4f62278c175582c6bfed3b2330092dc2a1d66cb00d1caf4f0b64a05de1da554262dc2f8b8f52dea060581840100d87980821a00d59f801b00000002540be400f5f6", + // c3 odv +// "84ab00d9010283825820c9221d9ffc9b6a1dc4bc94e127f1e34fc99f44028eb030bccde521689ed48d1401825820bf172f581fbbeb66cbc472bd067507640c510318a3457bd1f801d6c0268d0aaf008258201560a38ad176a1e5c68f226864209f9415567e2ae37a1356777d32bae8f79e58010183a300581d7089fc4508ade3e42f45219f4f22d3ae5194c28b28e04c6c64ce030cce01821a00c65d40a1581c7359c322c8a370c932aa7d50f8b81b22f5088ce3015625cd38daa4d5a1444333525401028201d81858edd87c81d87a81d879841b00000c052b8d2480d87983a5581cdd049da912ac535532f51da7f411fdb0a093fdf32373bca81309183c1b00000c052b8d2480581cd85844fd44a95ab6f4d924c8c2623284439e81fe475f46a218697a881b00000c052b8d2480581c02a176c2f75071194b94367c938d3e811a949fed1c4a6c9ac1b1070a1b00000c052b8d2480581c9d156ce4fc57d1c3e6052a01a60adb655bc588a1f5e7c5307702f68c1b00000c052b8d2480581cb3ee39f00a75cc87f5f78ece8ad6d69dd887c0cbd56beb3bfdda3b321b00000c052b8d2480051b000001991a5ec11e1a000f42401a0053ec60a300581d7089fc4508ade3e42f45219f4f22d3ae5194c28b28e04c6c64ce030cce01821a001e8480a1581c7359c322c8a370c932aa7d50f8b81b22f5088ce3015625cd38daa4d5a1444333415301028201d8185821d879a3001b00000c052b8d2480011b000001991a5a2906021b000001991f8518e6a2005839001e4363d842937c12b3f7e11565f3474ab4d8d53b2a8954c423623b22dcefcc51794afebc8dd27cc556256992877243d5d788794f2d08e55a011aed58a82f021a001e8480031a060c9288081a060b3fdc0b5820099fe5ae6c25ec4ef3b20750165edec39ff54c0cb6e77fbec26f9e281bd8c05c0dd9010281825820c9221d9ffc9b6a1dc4bc94e127f1e34fc99f44028eb030bccde521689ed48d14010ed9010285581cdd049da912ac535532f51da7f411fdb0a093fdf32373bca81309183c581cd85844fd44a95ab6f4d924c8c2623284439e81fe475f46a218697a88581c02a176c2f75071194b94367c938d3e811a949fed1c4a6c9ac1b1070a581c9d156ce4fc57d1c3e6052a01a60adb655bc588a1f5e7c5307702f68c581cb3ee39f00a75cc87f5f78ece8ad6d69dd887c0cbd56beb3bfdda3b3210a2005839001e4363d842937c12b3f7e11565f3474ab4d8d53b2a8954c423623b22dcefcc51794afebc8dd27cc556256992877243d5d788794f2d08e55a011aed8e100f111a003d090012d90102828258201e295f8fc6affb0a40bbba68f3cbf56a84507764853fa856ed473f72840bc5cf008258206dde3e22aa15edef5a19ee81b90a5c94af8844bc3559db6661c6479b2c693c0300a200d9010286825820ffdb1bab74d03bb522e5eab1a7dc6f89d35489c6bfcb1dc973e7ced854ee8f4158400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082582074560c548faaaf270e88b2bab9887f1b594850051f0b65510b2f42891e6ae7fc584000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000825820d0bf1e59fd70d10f464c02a7ad6d32ca6ff68413f5e3004d0c973055a0a180f958400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082582033d974383ec0a3783c2e65ea0ecda55b5c332b6899ff21d87009c77d5a90f8da584000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000825820f30e699a86924abb9d78737430cd59b441545eabf9d66620501fba8819209f95584000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000825820adf363c63c9f7cd357dc8ecac7a0c19c2e8c3f098b3547a405aacc5bb9f10dd058402c2a93390cd0e8d661cd35c5ebb5158d12300cb181744ded818bacd6eb81563e26d4f8480fd701efa0e831b27b56aa706db71980d6e948d8153e960ef864a00105a282000182d87980821a00d59f801b00000002540be40082000082d87980821a00d59f801b00000002540be400f5f6", + // c3 odv working (old one) + "84ab0083825820077dbd06cf196aabcd693292458c3d6de90381ea8bb10b894af8252770b606bc0082582078582bb0fd4595f28d3a060b1e4f40f9fbe57026673e73a31693b22d97034c210182582078582bb0fd4595f28d3a060b1e4f40f9fbe57026673e73a31693b22d97034c21020183a300581d7089fc4508ade3e42f45219f4f22d3ae5194c28b28e04c6c64ce030cce01821a00d441c4a1581c7359c322c8a370c932aa7d50f8b81b22f5088ce3015625cd38daa4d5a1444333525401028201d81858f1d87c9fd87a9fd8799f1b00000b8f76f13c70d8799fa5581cdd049da912ac535532f51da7f411fdb0a093fdf32373bca81309183c1b00000b8f76f13c70581cd85844fd44a95ab6f4d924c8c2623284439e81fe475f46a218697a881b00000b8f76f13c70581c02a176c2f75071194b94367c938d3e811a949fed1c4a6c9ac1b1070a1b00000b8f76f13c70581c9d156ce4fc57d1c3e6052a01a60adb655bc588a1f5e7c5307702f68c1b00000b8f76f13c70581cb3ee39f00a75cc87f5f78ece8ad6d69dd887c0cbd56beb3bfdda3b321b00000b8f76f13c70051b00000198f638def8ff1a000f42401a0053ec60ffffffa300581d7089fc4508ade3e42f45219f4f22d3ae5194c28b28e04c6c64ce030cce01821a001e8480a1581c7359c322c8a370c932aa7d50f8b81b22f5088ce3015625cd38daa4d5a1444333415301028201d8185827d8799fd87b9fa3001b00000b8f76f13c70011b00000198f638def8021b00000198f64206b8ffff8258390098a5c6ece8ff10c489970399ad9a282bc3b072b7bc45152acd92eab9cae5bfeaa305ff553400a65cd8d720c7e6d01cbbe220c245547f11431a0e55c3bc021a000de484031a06020047081a0601ffcf0b58204266ae95be46102b62b4f6b7bd27e0dc76298c85b478a995d94cb8a9c574890d0d8182582078582bb0fd4595f28d3a060b1e4f40f9fbe57026673e73a31693b22d97034c21020e85581cdd049da912ac535532f51da7f411fdb0a093fdf32373bca81309183c581cd85844fd44a95ab6f4d924c8c2623284439e81fe475f46a218697a88581c02a176c2f75071194b94367c938d3e811a949fed1c4a6c9ac1b1070a581c9d156ce4fc57d1c3e6052a01a60adb655bc588a1f5e7c5307702f68c581cb3ee39f00a75cc87f5f78ece8ad6d69dd887c0cbd56beb3bfdda3b32108258390098a5c6ece8ff10c489970399ad9a282bc3b072b7bc45152acd92eab9cae5bfeaa305ff553400a65cd8d720c7e6d01cbbe220c245547f11431a0e832f5b111a004249c912828258206dde3e22aa15edef5a19ee81b90a5c94af8844bc3559db6661c6479b2c693c03008258201e295f8fc6affb0a40bbba68f3cbf56a84507764853fa856ed473f72840bc5cf00a20086825820ffdb1bab74d03bb522e5eab1a7dc6f89d35489c6bfcb1dc973e7ced854ee8f4158406b5a1a935f7ed01ae13ff419d14a4e46bf64981dc7b9167d96b0581c677ef77d513b98b3c64b322777733f523dfdfa8eb47eaa5e4895965eca31073102d3230982582074560c548faaaf270e88b2bab9887f1b594850051f0b65510b2f42891e6ae7fc5840e7ff697ad6da5bf6ff9460bb11874242d667541810f27c88a3628028e831265d1dc94436bd380abb55b5dc0335f2d011a290f8ecadf112205fa1b10999dd3d03825820d0bf1e59fd70d10f464c02a7ad6d32ca6ff68413f5e3004d0c973055a0a180f95840c8449b41bda538830c7dbe06a642d6f7e7212bb35df4f941f39951662a779b6dd3251c22e9eaba0bcc3572d896bc7c55a18b569533f5becc87f978a93cfc030d82582033d974383ec0a3783c2e65ea0ecda55b5c332b6899ff21d87009c77d5a90f8da5840fd0b2d7cba26a0d8cdcef1920a91b9cc0c143670e15f9837a39425d103792db393764e790a1019d9a46a8c02b828f1a828b8d08a9e94eef442eac4cf61b6770f825820f30e699a86924abb9d78737430cd59b441545eabf9d66620501fba8819209f955840dc4b30d8efc35f1e5aa2790750df7c54bbda7879a0248ec813f0e9a8655f1316425b27bf877a6fbce7c60e6280260943675a356d9ed5f07146e71f47081eda078258201c019408138299160d59e5455520b0a51d81b1fc5e37063c251f897b872dc0cc5840e97ec9c35cd88ec17467330b8f5cbc992f0e9a762ff78b09faa32d359313bd3a0ad154bb3d2590363a9a95fcc51f1d1edca3e1d6d4c05ec83590a3b8076b640205a282000082d87980821a001a8cda1a21980c0782000182d87980821a000953dc1a0bd917eef5f6" ) assertThat(response).isNotNull() println(response.result)