diff --git a/CHANGELOG.md b/CHANGELOG.md index 50bf2acd8..ba69137c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ continued engagement as we shape the future of this project together. - refactor!: remove `amount` and `numAccounts` from `AssetResponse`. - refactor!: remove `cost` from `SimulateTransactionResponse`, the correct resource costs can now be retrieved from the `transactionData`. - refactor!: remove `pagingToken` from `GetEventsResponse.EventInfo`, use `GetEventsResponse.cursor` instead. +- feat: add `txHash` to `GetTransactionResponse` and `GetTransactionsResponse.Transaction`. ### Breaking changes - refactor!: Refactored the handling of exceptions. diff --git a/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionResponse.java b/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionResponse.java index 2c6da0bb9..f3377c3a4 100644 --- a/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionResponse.java +++ b/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionResponse.java @@ -16,6 +16,8 @@ public class GetTransactionResponse { GetTransactionStatus status; + String txHash; + Long latestLedger; Long latestLedgerCloseTime; diff --git a/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionsResponse.java b/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionsResponse.java index d0d5e2405..eb22900f4 100644 --- a/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionsResponse.java +++ b/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionsResponse.java @@ -27,6 +27,7 @@ public class GetTransactionsResponse { @Value public static class Transaction { TransactionStatus status; + String txHash; Integer applicationOrder; Boolean feeBump; diff --git a/src/test/java/org/stellar/sdk/SorobanServerTest.java b/src/test/java/org/stellar/sdk/SorobanServerTest.java index 8e09b0e3e..ad6333010 100644 --- a/src/test/java/org/stellar/sdk/SorobanServerTest.java +++ b/src/test/java/org/stellar/sdk/SorobanServerTest.java @@ -44,6 +44,7 @@ import org.stellar.sdk.responses.sorobanrpc.GetLatestLedgerResponse; import org.stellar.sdk.responses.sorobanrpc.GetLedgerEntriesResponse; import org.stellar.sdk.responses.sorobanrpc.GetNetworkResponse; +import org.stellar.sdk.responses.sorobanrpc.GetTransactionResponse; import org.stellar.sdk.responses.sorobanrpc.GetTransactionsResponse; import org.stellar.sdk.responses.sorobanrpc.GetVersionInfoResponse; import org.stellar.sdk.responses.sorobanrpc.SendTransactionResponse; @@ -500,7 +501,10 @@ public MockResponse dispatch(@NotNull RecordedRequest recordedRequest) HttpUrl baseUrl = mockWebServer.url(""); SorobanServer server = new SorobanServer(baseUrl.toString()); - server.getTransaction(hash); + GetTransactionResponse tx = server.getTransaction(hash); + assertEquals(tx.getStatus(), GetTransactionResponse.GetTransactionStatus.SUCCESS); + assertEquals( + tx.getTxHash(), "8faa3e6bb29d9d8469bbcabdbfd800f3be1899f4736a3a2fa83cd58617c072fe"); server.close(); mockWebServer.close(); @@ -552,6 +556,9 @@ public MockResponse dispatch(@NotNull RecordedRequest recordedRequest) assertEquals( resp.getTransactions().get(0).getStatus(), GetTransactionsResponse.TransactionStatus.FAILED); + assertEquals( + resp.getTransactions().get(0).getTxHash(), + "171359fff0edbf0a9d9d11014d0407486ff9f6a6e8f7673f97244acccb355b2d"); assertEquals(resp.getTransactions().get(0).getApplicationOrder().longValue(), 1L); assertEquals(resp.getTransactions().get(0).getFeeBump(), false); assertEquals( @@ -569,6 +576,9 @@ public MockResponse dispatch(@NotNull RecordedRequest recordedRequest) assertEquals( resp.getTransactions().get(3).getStatus(), GetTransactionsResponse.TransactionStatus.SUCCESS); + assertEquals( + resp.getTransactions().get(0).getTxHash(), + "171359fff0edbf0a9d9d11014d0407486ff9f6a6e8f7673f97244acccb355b2d"); assertEquals(resp.getTransactions().get(3).getApplicationOrder().longValue(), 4L); assertEquals(resp.getTransactions().get(3).getFeeBump(), false); assertEquals( diff --git a/src/test/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionDeserializerTest.java b/src/test/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionDeserializerTest.java index 76efa2199..a9262f132 100644 --- a/src/test/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionDeserializerTest.java +++ b/src/test/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionDeserializerTest.java @@ -24,6 +24,9 @@ public void testDeserializeSuccess() throws IOException { assertEquals( getTransactionResponse.getResult().getStatus(), GetTransactionResponse.GetTransactionStatus.SUCCESS); + assertEquals( + getTransactionResponse.getResult().getTxHash(), + "171359fff0edbf0a9d9d11014d0407486ff9f6a6e8f7673f97244acccb355b2d"); assertEquals(getTransactionResponse.getResult().getLatestLedger().longValue(), 79289L); assertEquals( getTransactionResponse.getResult().getLatestLedgerCloseTime().longValue(), 1690387240L); @@ -66,6 +69,9 @@ public void testDeserializeFailed() throws IOException { assertEquals( getTransactionResponse.getResult().getStatus(), GetTransactionResponse.GetTransactionStatus.FAILED); + assertEquals( + getTransactionResponse.getResult().getTxHash(), + "171359fff0edbf0a9d9d11014d0407486ff9f6a6e8f7673f97244acccb355b2d"); assertEquals(getTransactionResponse.getResult().getLatestLedger().longValue(), 79289L); assertEquals( getTransactionResponse.getResult().getLatestLedgerCloseTime().longValue(), 1690387240L); diff --git a/src/test/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionsDeserializerTest.java b/src/test/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionsDeserializerTest.java index 438946a0f..3fa116951 100644 --- a/src/test/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionsDeserializerTest.java +++ b/src/test/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionsDeserializerTest.java @@ -31,6 +31,10 @@ public void testDeserialize() throws IOException { assertEquals( getTransactionsResponse.getTransactions().get(0).getStatus(), GetTransactionsResponse.TransactionStatus.FAILED); + assertEquals( + getTransactionsResponse.getTransactions().get(0).getTxHash(), + "171359fff0edbf0a9d9d11014d0407486ff9f6a6e8f7673f97244acccb355b2d"); + assertEquals( getTransactionsResponse.getTransactions().get(0).getApplicationOrder().longValue(), 1L); assertEquals(getTransactionsResponse.getTransactions().get(0).getFeeBump(), false); @@ -51,6 +55,9 @@ public void testDeserialize() throws IOException { assertEquals( getTransactionsResponse.getTransactions().get(3).getStatus(), GetTransactionsResponse.TransactionStatus.SUCCESS); + assertEquals( + getTransactionsResponse.getTransactions().get(3).getTxHash(), + "8faa3e6bb29d9d8469bbcabdbfd800f3be1899f4736a3a2fa83cd58617c072fe"); assertEquals( getTransactionsResponse.getTransactions().get(3).getApplicationOrder().longValue(), 4L); assertEquals(getTransactionsResponse.getTransactions().get(3).getFeeBump(), false); diff --git a/src/test/resources/responses/sorobanrpc/get_transaction_failed.json b/src/test/resources/responses/sorobanrpc/get_transaction_failed.json index 3d72dd960..da45c8198 100644 --- a/src/test/resources/responses/sorobanrpc/get_transaction_failed.json +++ b/src/test/resources/responses/sorobanrpc/get_transaction_failed.json @@ -3,6 +3,7 @@ "id": "198cb1a8-9104-4446-a269-88bf000c2721", "result": { "status": "FAILED", + "txHash": "171359fff0edbf0a9d9d11014d0407486ff9f6a6e8f7673f97244acccb355b2d", "latestLedger": "79289", "latestLedgerCloseTime": "1690387240", "oldestLedger": "77850", diff --git a/src/test/resources/responses/sorobanrpc/get_transaction_success.json b/src/test/resources/responses/sorobanrpc/get_transaction_success.json index 953c4d619..4326e18a9 100644 --- a/src/test/resources/responses/sorobanrpc/get_transaction_success.json +++ b/src/test/resources/responses/sorobanrpc/get_transaction_success.json @@ -3,6 +3,7 @@ "id": "198cb1a8-9104-4446-a269-88bf000c2721", "result": { "status": "SUCCESS", + "txHash": "171359fff0edbf0a9d9d11014d0407486ff9f6a6e8f7673f97244acccb355b2d", "latestLedger": "79289", "latestLedgerCloseTime": "1690387240", "oldestLedger": "77850", diff --git a/src/test/resources/responses/sorobanrpc/get_transactions.json b/src/test/resources/responses/sorobanrpc/get_transactions.json index 40b527a70..27095be62 100644 --- a/src/test/resources/responses/sorobanrpc/get_transactions.json +++ b/src/test/resources/responses/sorobanrpc/get_transactions.json @@ -5,6 +5,7 @@ "transactions": [ { "status": "FAILED", + "txHash": "171359fff0edbf0a9d9d11014d0407486ff9f6a6e8f7673f97244acccb355b2d", "applicationOrder": 1, "feeBump": false, "envelopeXdr": "AAAAAgAAAACDz21Q3CTITlGqRus3/96/05EDivbtfJncNQKt64BTbAAAASwAAKkyAAXlMwAAAAEAAAAAAAAAAAAAAABmWeASAAAAAQAAABR3YWxsZXQ6MTcxMjkwNjMzNjUxMAAAAAEAAAABAAAAAIPPbVDcJMhOUapG6zf/3r/TkQOK9u18mdw1Aq3rgFNsAAAAAQAAAABwOSvou8mtwTtCkysVioO35TSgyRir2+WGqO8FShG/GAAAAAFVQUgAAAAAAO371tlrHUfK+AvmQvHje1jSUrvJb3y3wrJ7EplQeqTkAAAAAAX14QAAAAAAAAAAAeuAU2wAAABAn+6A+xXvMasptAm9BEJwf5Y9CLLQtV44TsNqS8ocPmn4n8Rtyb09SBiFoMv8isYgeQU5nAHsIwBNbEKCerusAQ==", @@ -15,6 +16,7 @@ }, { "status": "SUCCESS", + "txHash": "a3dd2e58b8f985647b0bd65141fd8274023bdd77ff280b94e89cdb26f88e121b", "applicationOrder": 2, "feeBump": false, "envelopeXdr": "AAAAAgAAAAC4EZup+ewCs/doS3hKbeAa4EviBHqAFYM09oHuLtqrGAAPQkAAGgQZAAAANgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAABB90WssODNIgi6BHveqzxTRmIpvAFRyVNM+Hm2GVuCcAAAAAAAAAAAq6aHAHZ2sd9aPbRsskrlXMLWIwqs4Sv2Bk+VwuIR+9wAAABdIdugAAAAAAAAAAAIu2qsYAAAAQERzKOqYYiPXNwsiL8ADAG/f45RBssmf3umGzw4qKkLGlObuPdX0buWmTGrhI13SG38F2V8Mp9DI+eDkcCjMSAOGVuCcAAAAQHnm0o/r+Gsl+6oqBgSbqoSY37gflvQB3zZRghuir0N75UVerd0Q50yG5Zfu08i2crhx6uk+5HYTl8/Sa7uZ+Qc=", @@ -25,6 +27,7 @@ }, { "status": "SUCCESS", + "txHash": "782fe0b775dbf301ae952ff765db5987c69374efc47218c665d6df49b0a9d0e9", "applicationOrder": 3, "feeBump": false, "envelopeXdr": "AAAAAgAAAACwtG/IRC5DZE1UdekijEsoQEPM/uOwZ3iY/Y8UZ3b9xAAPQkAAGgRHAAAANgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAABB90WssODNIgi6BHveqzxTRmIpvAFRyVNM+Hm2GVuCcAAAAAAAAAADgdupKeB04lazKXCOb+E1JfxaM3tI4Xsb/qDa1MWOvXgAAABdIdugAAAAAAAAAAAJndv3EAAAAQKcTimw6KKcM0AeCMxXJcEK/hS9ROoj/qpMFppGNAr4W3ifSOSTGAFbA+cIVHmaV4p7xGcR+9JnUN1YjamvJZwSGVuCcAAAAQK9Cp775JbnYA793SXkkWWbmvnEFTiDPiFyTHxTphCwBDB1zqkXqGG6Q5O3dAyqkNJvj1XNRDsmY4pKV41qijQU=", @@ -35,6 +38,7 @@ }, { "status": "SUCCESS", + "txHash": "8faa3e6bb29d9d8469bbcabdbfd800f3be1899f4736a3a2fa83cd58617c072fe", "applicationOrder": 4, "feeBump": false, "envelopeXdr": "AAAAAgAAAACxMt2gKYOehEoVbmh9vfvZ4mVzXFSNTbAU5S4a8zorrAA4wrwAHLqRAAAADAAAAAAAAAAAAAAAAQAAAAAAAAAYAAAAAQAAAAAAAAAAAAAAALEy3aApg56EShVuaH29+9niZXNcVI1NsBTlLhrzOiusz3K+BVgRzXig/Bhz1TL5Qy+Ibv6cDvCfdaAtBMMFPcYAAAAAHXUVmJM11pdJSKKV52UJrVYlvxaPLmmg17nMe0HGy0MAAAABAAAAAAAAAAEAAAAAAAAAAAAAAACxMt2gKYOehEoVbmh9vfvZ4mVzXFSNTbAU5S4a8zorrM9yvgVYEc14oPwYc9Uy+UMviG7+nA7wn3WgLQTDBT3GAAAAAB11FZiTNdaXSUiiledlCa1WJb8Wjy5poNe5zHtBxstDAAAAAAAAAAEAAAAAAAAAAQAAAAcddRWYkzXWl0lIopXnZQmtViW/Fo8uaaDXucx7QcbLQwAAAAEAAAAGAAAAAbolCtTsMrJvK0M2SaskFsaMajj3iAZbXxELZHwDyE5dAAAAFAAAAAEABf2jAAAd1AAAAGgAAAAAADjCWAAAAAHzOiusAAAAQM+qaiMKxMoCVNjdRIh3X9CSxkjAm0BpXYDB9Fd+DS0guYKiY3TMaVe243UB008iBn5ynQv724rReXlg7iFqXQA=", @@ -66,6 +70,7 @@ }, { "status": "FAILED", + "txHash": "cd510e50d7f75c3b09c7d0cf4fdb1d37338d36c1287caf321f03f8980186b10c", "applicationOrder": 1, "feeBump": false, "envelopeXdr": "AAAAAgAAAAAxLMEcxmfUgNzL687Js4sX/jmFQDqTo1Lj4KDoC1PeSQAehIAAAAIJAAtMUQAAAAEAAAAAAAAAAAAAAABmWeAVAAAAAQAAAAlwc3BiOjMyMTcAAAAAAAACAAAAAQAAAACKlutUN5GT3UOoE2BUkNtJEwoipGOinBFsQtXgpIZMxQAAAAEAAAAA433o+yremWU3t88cKpfpHR+JMFR44JHzmBGni6hqCEYAAAACQVRVQUgAAAAAAAAAAAAAAGfK1mN4mg51jbX6by6TWghGynQ463doEDgzriqZo9bzAAAAAAaOd4AAAAABAAAAAIqW61Q3kZPdQ6gTYFSQ20kTCiKkY6KcEWxC1eCkhkzFAAAAAQAAAADjfej7Kt6ZZTe3zxwql+kdH4kwVHjgkfOYEaeLqGoIRgAAAAJBVFVTRAAAAAAAAAAAAAAAZ8rWY3iaDnWNtfpvLpNaCEbKdDjrd2gQODOuKpmj1vMAAAAAADh1IAAAAAAAAAACC1PeSQAAAEBoad/kqj/4Sqq5tC6HyeMm5LJKM1VqKRGZc3e4uvA3ITThwn2nNMRJRegdQrLrPBTSgw51nY8npilXVIds7I0OpIZMxQAAAEDTZNaLjIDMWPDdCxa1ZB28vUxTcS/0xykOFTI/JAz096vX6Y7wI0QvnbPM7KCoL0cJAciD+pJxNqXQ2Aff1hoO", diff --git a/src/test/resources/soroban_server/get_transaction.json b/src/test/resources/soroban_server/get_transaction.json index 915aacc3c..2d5c2d357 100644 --- a/src/test/resources/soroban_server/get_transaction.json +++ b/src/test/resources/soroban_server/get_transaction.json @@ -3,6 +3,7 @@ "id": "198cb1a8-9104-4446-a269-88bf000c2721", "result": { "status": "SUCCESS", + "txHash": "8faa3e6bb29d9d8469bbcabdbfd800f3be1899f4736a3a2fa83cd58617c072fe", "latestLedger": "79289", "latestLedgerCloseTime": "1690387240", "oldestLedger": "77850", diff --git a/src/test/resources/soroban_server/get_transactions.json b/src/test/resources/soroban_server/get_transactions.json index 40b527a70..27095be62 100644 --- a/src/test/resources/soroban_server/get_transactions.json +++ b/src/test/resources/soroban_server/get_transactions.json @@ -5,6 +5,7 @@ "transactions": [ { "status": "FAILED", + "txHash": "171359fff0edbf0a9d9d11014d0407486ff9f6a6e8f7673f97244acccb355b2d", "applicationOrder": 1, "feeBump": false, "envelopeXdr": "AAAAAgAAAACDz21Q3CTITlGqRus3/96/05EDivbtfJncNQKt64BTbAAAASwAAKkyAAXlMwAAAAEAAAAAAAAAAAAAAABmWeASAAAAAQAAABR3YWxsZXQ6MTcxMjkwNjMzNjUxMAAAAAEAAAABAAAAAIPPbVDcJMhOUapG6zf/3r/TkQOK9u18mdw1Aq3rgFNsAAAAAQAAAABwOSvou8mtwTtCkysVioO35TSgyRir2+WGqO8FShG/GAAAAAFVQUgAAAAAAO371tlrHUfK+AvmQvHje1jSUrvJb3y3wrJ7EplQeqTkAAAAAAX14QAAAAAAAAAAAeuAU2wAAABAn+6A+xXvMasptAm9BEJwf5Y9CLLQtV44TsNqS8ocPmn4n8Rtyb09SBiFoMv8isYgeQU5nAHsIwBNbEKCerusAQ==", @@ -15,6 +16,7 @@ }, { "status": "SUCCESS", + "txHash": "a3dd2e58b8f985647b0bd65141fd8274023bdd77ff280b94e89cdb26f88e121b", "applicationOrder": 2, "feeBump": false, "envelopeXdr": "AAAAAgAAAAC4EZup+ewCs/doS3hKbeAa4EviBHqAFYM09oHuLtqrGAAPQkAAGgQZAAAANgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAABB90WssODNIgi6BHveqzxTRmIpvAFRyVNM+Hm2GVuCcAAAAAAAAAAAq6aHAHZ2sd9aPbRsskrlXMLWIwqs4Sv2Bk+VwuIR+9wAAABdIdugAAAAAAAAAAAIu2qsYAAAAQERzKOqYYiPXNwsiL8ADAG/f45RBssmf3umGzw4qKkLGlObuPdX0buWmTGrhI13SG38F2V8Mp9DI+eDkcCjMSAOGVuCcAAAAQHnm0o/r+Gsl+6oqBgSbqoSY37gflvQB3zZRghuir0N75UVerd0Q50yG5Zfu08i2crhx6uk+5HYTl8/Sa7uZ+Qc=", @@ -25,6 +27,7 @@ }, { "status": "SUCCESS", + "txHash": "782fe0b775dbf301ae952ff765db5987c69374efc47218c665d6df49b0a9d0e9", "applicationOrder": 3, "feeBump": false, "envelopeXdr": "AAAAAgAAAACwtG/IRC5DZE1UdekijEsoQEPM/uOwZ3iY/Y8UZ3b9xAAPQkAAGgRHAAAANgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAABB90WssODNIgi6BHveqzxTRmIpvAFRyVNM+Hm2GVuCcAAAAAAAAAADgdupKeB04lazKXCOb+E1JfxaM3tI4Xsb/qDa1MWOvXgAAABdIdugAAAAAAAAAAAJndv3EAAAAQKcTimw6KKcM0AeCMxXJcEK/hS9ROoj/qpMFppGNAr4W3ifSOSTGAFbA+cIVHmaV4p7xGcR+9JnUN1YjamvJZwSGVuCcAAAAQK9Cp775JbnYA793SXkkWWbmvnEFTiDPiFyTHxTphCwBDB1zqkXqGG6Q5O3dAyqkNJvj1XNRDsmY4pKV41qijQU=", @@ -35,6 +38,7 @@ }, { "status": "SUCCESS", + "txHash": "8faa3e6bb29d9d8469bbcabdbfd800f3be1899f4736a3a2fa83cd58617c072fe", "applicationOrder": 4, "feeBump": false, "envelopeXdr": "AAAAAgAAAACxMt2gKYOehEoVbmh9vfvZ4mVzXFSNTbAU5S4a8zorrAA4wrwAHLqRAAAADAAAAAAAAAAAAAAAAQAAAAAAAAAYAAAAAQAAAAAAAAAAAAAAALEy3aApg56EShVuaH29+9niZXNcVI1NsBTlLhrzOiusz3K+BVgRzXig/Bhz1TL5Qy+Ibv6cDvCfdaAtBMMFPcYAAAAAHXUVmJM11pdJSKKV52UJrVYlvxaPLmmg17nMe0HGy0MAAAABAAAAAAAAAAEAAAAAAAAAAAAAAACxMt2gKYOehEoVbmh9vfvZ4mVzXFSNTbAU5S4a8zorrM9yvgVYEc14oPwYc9Uy+UMviG7+nA7wn3WgLQTDBT3GAAAAAB11FZiTNdaXSUiiledlCa1WJb8Wjy5poNe5zHtBxstDAAAAAAAAAAEAAAAAAAAAAQAAAAcddRWYkzXWl0lIopXnZQmtViW/Fo8uaaDXucx7QcbLQwAAAAEAAAAGAAAAAbolCtTsMrJvK0M2SaskFsaMajj3iAZbXxELZHwDyE5dAAAAFAAAAAEABf2jAAAd1AAAAGgAAAAAADjCWAAAAAHzOiusAAAAQM+qaiMKxMoCVNjdRIh3X9CSxkjAm0BpXYDB9Fd+DS0guYKiY3TMaVe243UB008iBn5ynQv724rReXlg7iFqXQA=", @@ -66,6 +70,7 @@ }, { "status": "FAILED", + "txHash": "cd510e50d7f75c3b09c7d0cf4fdb1d37338d36c1287caf321f03f8980186b10c", "applicationOrder": 1, "feeBump": false, "envelopeXdr": "AAAAAgAAAAAxLMEcxmfUgNzL687Js4sX/jmFQDqTo1Lj4KDoC1PeSQAehIAAAAIJAAtMUQAAAAEAAAAAAAAAAAAAAABmWeAVAAAAAQAAAAlwc3BiOjMyMTcAAAAAAAACAAAAAQAAAACKlutUN5GT3UOoE2BUkNtJEwoipGOinBFsQtXgpIZMxQAAAAEAAAAA433o+yremWU3t88cKpfpHR+JMFR44JHzmBGni6hqCEYAAAACQVRVQUgAAAAAAAAAAAAAAGfK1mN4mg51jbX6by6TWghGynQ463doEDgzriqZo9bzAAAAAAaOd4AAAAABAAAAAIqW61Q3kZPdQ6gTYFSQ20kTCiKkY6KcEWxC1eCkhkzFAAAAAQAAAADjfej7Kt6ZZTe3zxwql+kdH4kwVHjgkfOYEaeLqGoIRgAAAAJBVFVTRAAAAAAAAAAAAAAAZ8rWY3iaDnWNtfpvLpNaCEbKdDjrd2gQODOuKpmj1vMAAAAAADh1IAAAAAAAAAACC1PeSQAAAEBoad/kqj/4Sqq5tC6HyeMm5LJKM1VqKRGZc3e4uvA3ITThwn2nNMRJRegdQrLrPBTSgw51nY8npilXVIds7I0OpIZMxQAAAEDTZNaLjIDMWPDdCxa1ZB28vUxTcS/0xykOFTI/JAz096vX6Y7wI0QvnbPM7KCoL0cJAciD+pJxNqXQ2Aff1hoO",