# Dilithium
# Introduction
The Dilithium Antara Module facilitates quantum-resistant transactions on a Komodo Smart Chain. The module also allows users to create unique, human-readable handles. These handles can be thought of as an address.
For example, a normal blockchain address may appear as follows.
RD6GgnrMpPaTSMn8vai6yiGA7mN4QGPVMY
A Dilithium-based address, however, may appear much simpler, as follows.
KomodoHaxor
The handle acts much like an address, allowing only the owner of the associated private key to release funds.
Users who are familiar with a Smart Chain's method of facilitating privacy transactions can associate the same underlying concepts with Dilithium. A Komodo Smart Chain's privacy transactions are facilitated by the pre-installed Zcash parameters.
These parameters allow for more than one protocol to influence the outcome of a transaction. In the case of a Zcash-related privacy transaction, the transaction has both the underlying Bitcoin-based utxo protocol influencing the transaction, and the Zcash parameters. The latter is what grants the transaction privacy.
Similarly, a Dilithium-related transaction on a Smart Chain is influenced by both the Bitcoin-based utxo protocol, and the Dilithium protocol. Dilithium's added functionality is quantum resistance, whereas Zcash's added functionality is privacy.
Dilithium has "q addresses" (handles) and "q transactions."
Once again, this can be compared to the familiar "z addresses" and "z transactions" of a Zcash-related transaction on a Komodo Smart Chain.
# Dilithium Module Flow
- Register a handle using the keypair and register methods
- To transfer funds from a
t
address into aq
address, use the send method - To transfer funds from a
q
address to anotherq
address, use the qsend method
# Tutorial Availability
The Dilithium Antara Module has an associated tutorial. This tutorial provides instructions on installation and usage.
Link to Dilithium Module Tutorial
# handleinfo
cclib handleinfo 19 '["handle"]'
The handleinfo
method displays information associated with the supplied handle
.
Use this method to determine if any given handle
is available for the user to claim.
# Arguments
Name | Type | Description |
---|---|---|
handle | (string) | the handle the user desires to inspect |
# Response
# When a handle is available
Name | Type | Description |
---|---|---|
result | (string) | whether the call executed successfully |
handle | (string) | the handle the user desires to inspect |
status | (string) | whether the handle is available |
# When a handle is already registered by the node executing the command
Name | Type | Description |
---|---|---|
result | (string) | whether the call executed successfully |
handle | (string) | the handle |
destpubtxid | (string) | the transaction id generated when the handle was registered |
pkaddr | (string) | the hashed representation of the Dilithium pubkey |
pubkey | (string) | the pubkey of the node that registered the handle |
# 📌 Examples
# When a handle is available
# Command
./komodo-cli -ac_name=MUSIG cclib handleinfo 19 '["KomodoHaxor"]'
# Response
# When a handle is already registered by the node executing the command
# Command
./komodo-cli -ac_name=MUSIG cclib handleinfo 19 '["AtomicWarrior"]'
# Response
# keypair
cclib keypair 19 '["hexseed"]'
The keypair
method generates a Dilithium pubkey
and privkey
. This method requires a 256 bit seed in hex format (64 characters).
If no hexseed
is provided, the module uses the user's pubkey seed for entropy and generates a new seed. From this new seed the module produces a Dilithium pubkey
and privkey
.
# Arguments
Name | Type | Description |
---|---|---|
hexseed | (string) | a random hex to provide entropy for calculating the key pair |
# Response
Name | Type | Description |
---|---|---|
status | (string) | the quality of the seed used |
seed | (string) | either the seed provided by the user or (if no seed was provided or the provided seed does not satisfy the requirements) this value is a randomly generated seed |
pubkey | (string) | the Dilithium pubkey generated |
privkey | (string) | the Dilithium private key generated |
pkaddr | (string) | the hashed representation of the Dilithium pubkey |
skaddr | (string) | the hashed representation of the Dilithium privkey |
result | (string) | whether the call executed successfully |
# 📌 Examples
# Command
./komodo-cli -ac_name=MUSIG cclib keypair 19 '["rand"]'
# Response
# Qsend
cclib Qsend 19 '["mypubtxid", "hexseed/'mypriv'", "destpubtxid1", amount1, "destpubtxid2", amount2, ... ]
The Qsend
method sends coins from the handle
on the node to any number of other handles
, as refered by their pubtxids
. This transaction uses Dilithium signing and is quantum resistant.
Multiple pairs of "destpubtxid",amount
can be appended to the array to specify multiple recipients.
# Arguments
Name | Type | Description |
---|---|---|
mypubtxid | (string) | the id of the handle-registration transaction of the sender |
hexseed/'mypriv' | (string) | the seed used to register the handle |
destpubtxid | (string) | the the id of the handle-registration transaction of the recepient |
amount | (number) | the amount of coins to send to the referred handle |
# Response
Name | Type | Description |
---|---|---|
hex | (string) | the hex to broadcast; use the sendrawtransaction method |
txid | (string) | the transaction id generated when the hex is broadcast |
result | (string) | whether the call executed successfully |
# 📌 Examples
# Command
./komodo-cli -ac_name=MUSIG cclib Qsend 19 "[%22d60d224d7855a40507064c5ca72ed7d84a54340174eb16e31d079e4b4f230940%22,%22e580f34e9bdfd23108409e76475c7df3f924d149d494d5cdbc24aeb280237d4a%22,%22af710c0fd6aeb54556ee401803bc4cc39ea9002ad5228f308b27eb3af0e4c4b6%22,1,%22b625e38064cb0c940a55f0dca7e6b60270aac090d0dd90d4e43e924d696564a2%22,1.1,%2276a914b738b1730cfb58960b1dd1765c6d3276993959e188ac%22,1.2,%22a9144d5e24fcd799f3a3fa15f98a6c69a5829596f56087%22,1.3]"
# Response
# Broadcast the hex
./komodo-cli -ac_name=MUSIG sendrawtransaction 0400008085202f89016c21f44da4afe05aad8b271659c6cf8cfccb6b6e33fdb9f5f0935a0d6e8ef616010000007b4c79a276a072a26ba067a56580210377ffe2b64443ac5e746f29b021e22411c7731d675f169d32423f8f3d6fc9ea3b8140ccb5db05dc45a4ec747705d76f2e71f3ab43830693f093536d23e6ab31c18b0c04c2906a8e600629b9264043d4534da3c22c1fe1dbe2192ebce23b8a99cf35eaa100af03800113a10001ffffffff0600e1f50500000000302ea22c802008b4a3a211fa1ecb9d245b3267827a56924653fe9bb4697510cf5d65e4bbfea98103120c008203000401cc80778e0600000000302ea22c802008b4a3a211fa1ecb9d245b3267827a56924653fe9bb4697510cf5d65e4bbfea98103120c008203000401cc000e2707000000001976a914b738b1730cfb58960b1dd1765c6d3276993959e188ac80a4bf070000000017a9144d5e24fcd799f3a3fa15f98a6c69a5829596f56087a0244c1200000000302ea22c80200c0396b7e2db09ab239f0b337fbc7df888273e60323a63d0caa862116bcf51a48103120c008203000401cc0000000000000000fd100e6a4d0c0e13514009234f4b9e071de316eb740134544ad8d72ea75c4c060705a455784d220dd6fd460de9fbac397128243cdfe192f73c9eb327fcc75338e694a94f4df8bcf7d668868731be4f2b886f5d1292e3542f31f01a390fcd7491d730b57ce1fcd6abd792efbeb4047f2cc24b98d07577f3121a74a141d1a7ce94b1e03fa69031e91baa38ef209866fb9db448445fc4794331f5efaaadd1ee58c58deac4b26012ed65f876fb056711d3902500d2d45c0e4e082d8a058a7a671a2fd2a855bd882ee5a06962ab72d93783c7f1fcfead9f712dd3af0424572ce58a36b4e558bc9c95650351794134f1d74f8f275500f19bc967a64ee0baef222bf34c50f0bb771759afee0b202a542d4a349e2224820a2fc29259192e1dc1c2648b161a31454d9a6489fb26b280ad6dd3f1916cae118150d49c52401665c8b299608760c83659f88783120974f85f22d9af9b5ea1dd4a145b29aca2929ffa0449dc821cbe0dd8f86017a37573ad8ca33901e10664822a0ff0825f957bda6148a41d8bd48ae42a7fd10e73e4f28198e767abd1b2c1297055729ddbb613d3d4476b8cf228be84248bef116546ec8d773d271b2a850711f2a8cafd3502575c94a5c258c322f1a0123f439d796239dc7a40e996ff282eb605b7bea9336fa2d6443924a3487f3275095a8fbe136918cb6a69afa2881d793d0d70433c0e16ac5218da88ce76194d86ae8c283184249cd4fc3824614f95af655556e3c3c90765358a63c411cf5df4075546c9555feb2fa1057f540a79a30ddf997248e47076418b31514607236ee23f56b8bd7ee03e09dd063199c45b0b120af1e44920b535aae890d51d0134ee24872a995b991efa31bd4bf9e551727a877d29ef269b83efc0368d042086535b6bd956c2f7bbc3b686dbd765d092a98e825911a13ea92ad2cd7604288c0e7595ee3763849a4d61c90ed7686a3902417eb90d59e40350b12353fd5fcffc53c52759ee393e68227018c924ac9c0390d3029fd26dcd93609d57f19868abfce563dbb93921837f85b092b8539447e2696a9d60345fe390200ce741eae671561b54ee0f58c32e944a954143dd274e41179907a99394c9c1c978a964555d91d0acdda655064a824c7673dc84d1d5a94f06ca6b19078dcd657acb9d84518b94c2f56e4aed02c50a1861d536fe19c29cfede262d8cdf1fba7848f017ce53bb99eb9b40d0b2e5951b47099d8d975bf3054baa8019a9299794e9c4e1f7117974d15dcd4bf1f75b732ac65cbbcd9d2c232e8445d93f422a9315d7c7627d5e4d424094d04c6e419e9805b7bb7849214d35e02139463e73989d019cd1ea3a9084f353f3145df38f88ad0baafee1f0e95477cacc7b0246db8b4ed485db10c999c508506d0bbff6185c53903f8565edd90fc16e3f6be972463e3246a73cb1e2cb294209c71838ae86732cab6f648d10459123d30a59c1bf63a2232d32c8cfe0d06c4797c883d0ad452643496dbec37f87a1a90b525a938cf3367c9917e57c506d0fa422e530753589bd9317a775af64de696857705c5efed3037ad7ad7e1a4789ef238c6473cb433eda187484592e48e5d237d73f558cfe24f68bad4ee85b77c01b9924e262534c9a2486432a5be199aea85a935f6b2424a4fbf3a5dc7afc1866692404de45f41393aecc7ca5761c25fa5922ccebeb8b0580633c75a944d473d18318fe0fb999dd61259813bd0f5c62ff50df1148c6d12757b2de3be3098e7c283eaa3acea5049f4a7e1393235dfeda7b0fdcca6cdeee5410f023bc4c1a157cda0044edacb30b4f00d3c647e83aec5b966ed4e1829eb1f9ab7da7715f34e07e17ed59e45922500f493d74ab8f8f645f3e9002d202f9c2ed14ec698548b7d0ea182c8ea9de1b9146b3a77df43e80a2d085636eb5a80f9d643682d211ae13bb6569ce3411aaca39727850155274aa842baef36ade2173aec3d6c3f4039038d55ff69a7a35ef2d08b5478106b9f0364a8c0e95cd4751bd905c4c38dca63bbcdce24538bd08fb0cc7d9cd1f5dfc1853d502e1f38adaad6c468d9e50ff81d2a6b8dd3db7602bc272675d2efb70382dc19b9039a0b32d876787f2d0e0671b11adde48aafef6d684c517e77217be631366bf99f1109e55a389436e915d847f212b07a5c6fb94db999662ba20e92e642e88bce288cdce3dbffc0d52607af784f802eb18e810d49766ca752a6534d7459a97a2bf07787c63cd836862eb05347cebd3882df760b37b873b79d935cc4fa6f444a6f4d2bae51dab832432a258c1d741d7c133e55302920527e02f1ec8b0ab2703df6fb4c3d357efa75a53c91666b59ed6135907edee5b7ce73c3730c90e235cde4e384dd51f7d7e1b82e3c7cedff649fd6a5f247e829ea9e00d58c37ffd545cd311ad369928ac396cb5dbdfad2c6de10d0a0b1047df15f26c51b225ee148d95dd9c5aea4a4da592cd59b3fcdd8478ee264ed68e61aee55585c32b6dee251f593e8a9f492b9003208af4e04d0e5ee00afee4d0d074ae9aeaa8fda26e89fdf4825da2f0211b5c9a8eae9f1070f401cd6583d0296057c9707a481983aa45b76b290aa249cc5a545fe8956000fc2d48c4803dbc642e1ef9ac3904652ddfa3b6a29e405984a2188b31eb358ea04462ac751937ef5a153d865e6b5951392dd6b4c6ee16224705486de08d380827554419ab24b37b58bd351d157194640d9eba45c13dee0bb73429b497e3885568161f286a6b6f67d8054674a717c6d26defc68c734622dacb8a2fef4dfbd425ea78575402d15eeb9d8cc6f99b0ebf33738b34e14f34b4b990deba45abe2d3c81038d4fa3352a4e904d9d6b244585ba1b0f450c9da0fe84e711255846bf56fc483755dc006f74f816bd27c408c1d4102e2882702b7afb187096a1046cd47f1be2a10400040d310b862232ec7b8419764d05ffe3833bc8462c90ea3f4b65af3fb07b885c9403434b6e0326b05188f8c05d157e0e721a9514fc189dd7c6455d261482fc46c4c206d94ba737a1e456cd22a11e3daf0f2c5716af6ba28419cc17ffa7303ee25d52675a1612ec1cc3bb708c1f0a720d9f4e4c5b47d4bca46f393eced4e6de925262ef229adb4405c44c7ba73646ded1bad4879f8024e84eec05c8bd635bcc6372e1f420be1b7e7f764d966b8715b21b73efb19c4c2d612210cd13fe06bf45d79b0886bb67c9d8f7308cdabde24127d7d3181b3283582b27ad46e0076e03c3269c11b613a6e0375992cac30acbdfb42eb99d6b3cdd845a978845dc7acf67882eaa532641b56ab5626581fca7481e4d1f54f1fb6e1accaff130a66cbb61fde59bc2052c48325a45219818648791ac33046832b02cc9e6aa587aaedb6e7f5d2e18f9b2e6727763f9511b715a43d7a4f608cb3cd037f4e26a455f8b4f9706ec408d4d435be1e6482c2db2aa2f08f23a31900128d57f210e34cb61f73dea2614cb51c220789a40cbfa35c9d565e1f9b809c81f9e3bcdfd5fd814b619b9c7a579daac86c60abcb7293de50b0a3702e3b877f828777235a49920c9dbf5ed9ce3a3f885c2bf985c620b7d0dafd7366a22554b6601af7866b5ccef7e8d67a29345598d98f946a204c128487fb672acbc68097d722d9e12f625b62e8b9affbf05539e44b62e72f6e2d917f1660033dd2a171d37387002cc04cf857d6100409a47d2ce9926c781758d0b7405d9d40086f5835685cde5648495864ac138bf81dac0f6d972096e993b49973c7dfa9a942edc9fe8fffccceb312a0e25b3a335e3b4f06c34cfbe4828597aeccf738a8164fefd1e88b62b12d76d13a5cef333bf8f16135dcbb84fa257b24eaa1e2b7d9c9e9fef6bf5d908e57a05c75d950dbd9ed6ab6f72a45f29e8fa80987406cad82c8d57c744928e3c5b5dbb054df82952b6d995d8b981b532170b311d701b1c0613787b3dbba56c254ffd8ff11270888029d9b342f08c891d185f2ec769afbc8d2b5e232c2ff3365c038102e09094d7dba19552a773f5d2fd153b24ebf7950f7d8c9b857413461cd68c464eaacdfa050b05e4b67a842727ae83a560e692fd7c473552e0b4d6c33544bb3498e4f77061bd8b06a279e68e813ba1571744328f27ad2f9d92cd0e33897c649c6cf33f235604e092d002c1f7e5fbe5cbff16b92540e33e4b3afd99e7df80bc23eca979125c0f271eb1f3e309c9a4dc48e82873b918c1b75ef029f3fa80a65d0ba9a3d7739a0763bbeee1920cc953d46921dcecb65a57f608b9092221209f5dcdddd66998f295f043114fb4c263634381cd381fd75e6c9d21620d13a4544a1ff4a9b789ca115d8108f8ee063c4ee9fd4e21886d74c3a54fefae364fc924d9a7d0994796f6753f92b7fb77be7ceae095e8de8b064aa3ac04138fc9c92a5b63714644ca35c9a12559a0b406df0dade4bc2018c029e0f5e87326ba85360788188cfb03873255c2adaa347fe8265f1fc32d0a8b90ea49dfb8aacf01c69744cf0096298559670d515540cc929480b7fe97608111f17b6a39e3e4b9c127e027d4ce00a761c3e3336b91e4bedacaf3a84b44e3f69180d8da4c7ddaed25841351096d7e822ed97c87250f901365c656671b5b80b0c182126333945516f8f9294bdc6c7cef8fd1a1e5c686e8081949a9da4aab4bde0eb0a28292f373e4c51545cf9ff11425c6b6f7a7e7f848ca1a8c2cbdcedf0fbff03192527353e3f55878fb2ccd7fc0000000000000000000000000000000000000000000000000000000000000000081b2b374a588124700005070e14a0805080a84a430004891a4412051202000440190140c06261da92a73502f904c0eab1b16b2d2b60ec32c1863d95069848bfe717ae65f8d8b718f7dc2f5b9c0605b6c4e4f03aeb278b308f22d52a00a99ec34cbc031840ee5645b5aed60f0c71afa26465694d923ee4d490ddd090c0aa7002b6e6a7dcf0550a940ccb6480e325b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004009234f4b9e071de316eb740134544ad8d72ea75c4c060705a455784d220dd600000000fa6c00000000000000000000000000
# Response
# register
cclib register 19 '["handle", "hexseed"]'
The register
method allows a user to register an arbitrary handle
(such as an online anonymous username) to the pubkey
the user used to launch the Smart Chain.
This method requires a valid seed
, as provided from the keypair method.
# Arguments
Name | Type | Description |
---|---|---|
handle | (string) | the desired handle |
hexseed | (string) | the seed used to create the Dilithium keypair |
# Response
Name | Type | Description |
---|---|---|
handle | (string) | the handle registered |
pkaddr | (string) | the hashed representation of the Dilithium pubkey |
skaddr | (string) | the hashed representation of the Dilithium privkey |
hex | (string) | the hex that should be broadcast to register the handle |
txid | (string) | the transaction id generated when the hex is broadcasted |
result | (string) | whether the call executed successfully |
# 📌 Examples
# Command
./komodo-cli -ac_name=MUSIG cclib register 19 '["AtomicWarrior","a70a8e7d2281beaf0762a11590fb566d7af32325ae4252609149de37658e2eb5"]'
# Response
# Broadcast the hex
./komodo-cli -ac_name=MUSIG sendrawtransaction 0400008085202f890c3ac9dfb08a10d3e47274ad9c1f3de2e59b4dc34b433ec7a171cc15880b67fed5000000007b4c79a276a072a26ba067a565802102f1c7993a9bf3863c77853315af7e37c12008ea1c5c3d8722c91bc3b5a019652681408acebab227b096d42a78dddf98b4e834a164e5627e63d1223cceac25e6f8e41617c30ee7463ab48b1229b9ead2aed29b2472f265d5d347f4ab17b3c93f47d5c1a100af03800113a10001ffffffff05ddc1a108a5313bb185ded05ace4d8e29a2f4608f0c7ff7251d11595f3a445f000000004847304402200b10d4b69c39a3fbb15060908c82703e2bf5e573eb01c852fbc2ef531ebafd81022036e4faa9a8ed04ca8502da4c0c20ce6d3b25f82716d1c694557b56e98a26b95e01ffffffff07cd294b67f76a3745a00fb2ab20f6c329eb9f69bd5ef924773bec9caf95821a000000004847304402204a18f2084fd6ce364267bdc708d610028ba41c3155dc895db578c7739abb33950220656b8184a333f806923a29a24f9aca24a122e482d1c66cbab5d811790edb69e201ffffffff076950481295bc4ed92a1967107684288f9702951c302cbd1dcd769e51b42114000000004847304402206c294c39d279f44f7d36d72706a25b296d9fe4a5f8f675dd607cbdc5ba9b93b402201660a9d6d935355fe979b33c50b25b267125a9fc463abc5346355cb953e6e7c801ffffffff07386ff4ac0a46d343afc36786709ca93f08bcf1feb3562ea7baf3bd58cd7a2f000000004847304402207e66ea8cf31bcbbc156cc2d8b020a95440183ea3034dea20607b6a7ef28b9efc02206577bf339d49ecbf698cf434e6ad63f3ca41f83be446a3998d397f097b9d0e3f01ffffffff071395c451379d66ee21321e376721d67fe510287393499ebcf1a67683f3d611000000004847304402203ed2d7ebbe1165bfc02efec4f95905473d2fe4f0fafbe7d0fccac39d379958eb022008c385d3fe93f3a6e10ec4ce78b67f5a93f3df43c08be7534ca55036aef291d701ffffffff0682a878de10392b1807abf35589c9a3aea4137b12d61716be974934a9b116cd0000000049483045022100f6dd23ae75da9f0ba01927f32bbe03e90e16f0f216227400c58f331b3526619002202c522e7b622409ee1974f03022940daf7b0046523b1c69c03fc16b3a55c21f1d01ffffffff066f21010b80faee30bca88603439389aa2274e52ca8f4d288d6881997a1f06f000000004847304402201d98276f505fc969ecc1f5f4df2d71e371b9537f94e466ab6b35594b13afbf1d02202dca6c57312019400809d9bcc7fedccda65d02ca0fb492a72f98128ca4b95d1001ffffffff066e38c8bf4aa889d9dcc53aeec1a95d548400211280fe24d4c0e73de69309bb0000000049483045022100e8255e4b42d3084a66afd9984c7345cec47a15b509f49c4b04d4fafce5bfb77c02206152baa639a6393a4f86db5fd6739cfd096701a1617210aa7138dd8c752bd46701ffffffff06507713eb6ba1246886e7c8364b5c7aeece7251f85d0ba50190365651e161c7000000004847304402203a19e60986b7f45ba8dedaaefae62ab3d9052787c650d6bb5b1168a5afdeafb002201e9691b6093383af569463158d6dcfb6dd6649054c6a3aeaafa435d36b74dc0201ffffffff06195fcbe6c657da6cbfc69892ffb67470fbae568fa826169201aabdc2f2ad82000000004948304502210080952f9f65195b4f2122bba7e14c049a4253b5c356d548c550bb38f1317a31f002205b7c3743bfbab00ff100174edf1367aee599c6df02afde5c62680b68d1ecd64901ffffffff0612f70038d70cfff5a1bf02d39357d567aa0b02e98c97fd877399fbd0763dff0000000048473044022056104b269b860662025808532cc594a11de207be0b0121a247aa1c3abfa834cc02204486e95cb0d1b27a41e4b3af458c6181c0e6d2a97eb8fb32df313ce423e8f81601ffffffff06204e000000000000302ea22c8020979f9b424db4e028cdba433622c6cd17b9193763e68b4572cd7f3727dcd335978103120c008203000401cc1027000000000000302ea22c8020749dd6534e79a31aeba03df3b0ea58632a0beffc3411b54b7cc0e714ae2dd61f8103120c008203000401cc00e1f50500000000302ea22c8020e029c511da55523565835887e412e5a0c9b920801b007000df45e545f25028248103120c008203000401cc1027000000000000302ea22c8020979f9b424db4e028cdba433622c6cd17b9193763e68b4572cd7f3727dcd335978103120c008203000401cc502198000000000023210225f1cbbda1a0c406bb8f6dc7a589d88b2f9e28cd4fdb3f59139f8aff1f5d270aac0000000000000000fd19076a4d150713520d41746f6d696357617272696f72210225f1cbbda1a0c406bb8f6dc7a589d88b2f9e28cd4fdb3f59139f8aff1f5d270afde006e4f25d02a6aebaa196ef1ba40f9c8156ff691b5505c72c304f9bcb4c0506167447056dc7341b1431132d0099e8e0a7c134fdad28e6ef8a290c24652260502f43876c043b5bc48f8624c2c396ce1a10e2da59fb73d5523bbe830eabfa6271f33981c54b519c25cd6a76f8298d4f380c96c8dda1a95b45c672bce7c67afa1620cafb5650c1b48758256548b6513f4b8862aa2ca959d244a3955fe095cbf07458e6dec3f73d1afa9f4cf40213d3e7355499cc23f9cec63437a352751d2b95a0353e5ccf70eb2ec5b6d00bba3f12d8e5af3ee752612361e0eb474a3f7221175462e9c171bc6cf709aa5ab53a7683c24decd759f97503a2118f798da1eac081ab7c9e61fe8697746dbe1e798690c9ee600ee53eb336b714130404ed9c5f0d1407a007641b723e59c9bd5178cd42953d10b97d367fd75fa0cccdbe7daaee7b11698e667f1fec2a78d5b94a013efc2d9fce26ef7bcb44371e04854a0f039256fbbe0d472f89b572f5a252528d426a6642fb92d243092b35976b54ece95e0ac246491f6dd024a7ba6cc164fd5172e50c893ef974abe1929f286036cdaf7a5c0395bee9d8feab5b80c07cf4d0b88e4df10a08bd4187bcf82e34a5631a32fae96ec25f992e20b7987df6d0d70535dc247640c00a3b4baeca3a579fa91dad116f3fac11223be5848bd9f34edd0fa3528adde06896f1e363ded56ad6feee9b9bda41f32d4d1279d005e6eb7997bb73dd085154738d11ab800a3d0964c441cb2117d6859ce6908b0525161bec38ccfa3ad71f6005b5891facfc54a2a25b758f8067f754abe41fc769ecea5b83c0a91f4edf549760954276d4f3703c7c563c5a9003501ceed81f382903d581fcb1fd823a0a9caea81250005cee48e98676df2f0cea71fc2ef0decf3d3bdd7b0d5c8ef7f64a8b6fe160290b57c2724bbbb264ed2b6f48a585174c30afd51cd5bb43138d7f88853cb9919a697816c9d0ccdee186858eb48d76853abfdf1629a3a3d781786b55ca1d19413304341b3db4e2a390b410d8da35597d53be07149a1da27c1e0c439565f404259cfbf9a90511bca1f3bc2c7d9592c95eb83da99f848f551a402004e7a7af1896d05899da19e2a133ee50dce1eba96ffb626340cdf713cedf8579fd76d65f144f47065b4517b6be66cdf112029300ccdfda9158be86845195f5e7a50c90a7360e4470ec7b28700393d0d8685cc32c5f352de03f38efc2b6a379def182aae527ee18dd69c0e4cf1398b220e26dd052371a83db082f55318c0e0fc27568f5a6122484f889cb73d29c8da6f91a65035543088a87e68c2b8ce2f7c87a0613f89a04d372e19a1aaaa5309a032d01c20b8d56c819a85fa19f2ae1dbdf36c83b65fbdf76026cc91925ca06254759c0b6613e11a9cda6413e52695fb20cd61145d477d779a389e63eaeeefe6bcd1588e7b149cdb234616764f13b8e61e045d2ce9e53668aab202d7d941fb5d314fbb2c12d9baf71ccd2a43ae8745973626ac4d3c15b4d4df8a756bafaa6c56f3cddf78e3cc008c909ab31bf9716283d1c91688efba7ecc048218a5becee52cbb22fdd57f6907563106aae0ba8daded1050a3617d5962d108aece6b25309fbb63f739beba4dd5117c7d36ce5ea324c2fe98b27e9094acd8e9038e41ae5e7f5e7db705f1b297a341f3ba10f3a86942581d97825e97e0e43b0308cb3b283d303b5115c539cf4b51e0e963aff3270b696159fce3e3e7e5887a15e2c40c0fc308d037adcbde18e765915bd990039df9e78c5af9e5a7ab96bfc79680e2c6e937599893a737a8fb0910309cd75dac3b699a048274a987fa1b3d70d80a21eb23ba8191b508440ba5264998d46ba951df5a022226efcf8526e765cb88048675ab5bf3158bde9776f670b3e914c44c1ce5dfbb806a27b7155e8b3a12e728899b61781ddd1e7000ae120afd025675d50c491ffd7e97698feddfb1cff0b0d1cc428d2f0be466e58a081985d444777c4add2475fc80dfb4bba5e191b4bc6b631fad2d96a910254366b94fe45c116d08c8c01c0158073f9f5af721f08d772f95ac5a6d55b69c9adc3abc4e9d816cf4bdb86fec744fcf0817142079fb97c74335eda37b2bb4124c6ed91ef1b1c7285195a197d82dd755697c9136e49b652bfdbf7682558d8f70fa9adb9c4c5c0b32545fdf7313f6d68fe0a77c38c49b18ae79dc57aaba711e8ae3f8be3a007f84bf26b3f8967b95f4696d3a37598f69deab9e3d1e251d6a095280e1e3d1f873aa53942182dac1bf768a4c3bd8df15fa58589ca7e979dc5f6707729f064d1cc24bedbe3ad9404a1767918278677362a253a723223da676331c4cabe11afc441a365abdeb119fa5f6b66107efdd2546ada80014b382a62e90f360127279ffb54835b34ce886d2918160b05d9b4e91996467aacc6dcfffd56c13138c04e50b63693a3a6e3843b649ed2e18986aea35d35634343a7c50de1aeb8730f6276080549bf43a1ba00000000f55700000000000000000000000000
# Response
# send
cclib send 19 '["handle", "pubtxid", amount]'
The send
method sends the specified amount of coins to a handle
associated with the pubtxid
# Arguments
Name | Type | Description |
---|---|---|
handle | (string) | the recipient's handle |
pubtxid | (string) | the id of the handle-registration transaction |
amount | (number) | the amount of coins to send |
# Response
Name | Type | Description |
---|---|---|
handle | (string) | the recipient's handle |
hex | (string) | the transaction hex; broadcast this using the sendrawtransaction method |
txid | (string) | the transaction id generated when the hex is broadcast |
result | (string) | whether the call executed successfully |
# 📌 Examples
# Command
./komodo-cli -ac_name=MUSIG cclib send 19 '["AtomicWarrior","ea448ff66aa925239cff7ca748d3aea62474187fefbd1c15fcaaa14c4529b82a",1]'
# Response
# Broadcast the hex
./komodo-cli -ac_name=MUSIG sendrawtransaction 0400008085202f890b07d7463ac5b5ff1212587b75c8415a92a628e4dc211561b90ea5ac7b37af2935000000004847304402205055d1e1babbd1216613d6e57e23b7de86ebc6a4df935db181a10ad9b1e6d23302202d69603b098a0565df5ddf1cafe96cd0fd591fe47c4fa2701e77135ed3c797af01ffffffff0ac7f5fbcfa6fe533bb619d98cca38406b6b97e69d91090c2a1b9fc210163890000000004847304402201b4cf6a262534b5e1ddeca3e1289cb0d32e4a9f1349b557a998ea455c02a890d022008eed182ee47bff2d14af9d130704c4a38bc7bd683c38c9cee81142c208e112e01ffffffff0a43b879094d181d1d3746320f50edd11b931a32fb666ffac69b3fabf52e78e40000000048473044022067c0ca1d5166566b82c73217369ab19acbb53a01a8d7ff1636c5f77d735e5f7202201d542b4dbe7ea47a102f460f7930c183d9022fcfe35437b5f7898c154267e56a01ffffffff0a33490539d3829b5a7c2f6de716003a50ecd5228c79104517c718aa8de2ce8c0000000049483045022100c683d67b101ecc094c84607a3e10d9387aa47520a48e3f60d446fc9e8d85624b02203d520bb85d860858c947d7e138b7228ad810da47a6ce37cbb530f8811d24c0d301ffffffff0a3292a70b1a9fe7a3617abc9ba62da3d01bd0388b18dce657b795ee83a0b1390000000049483045022100f2cb8a23e21256dccfc778be883bd0a2961c5df5295cf66ec0ba6bfb8b4bc046022035c25c9b477946fe89c3ca5e26a045c441d13ec17e34864e16155ff9146be98e01ffffffff09be749efbfc980b15412a17871be7dbf521e13670bf1c8361c5a25e63daf69a000000004847304402200c5aa79cf8cb57c2907996b12671137ae8703e95b446ff16bcc719f64405a6ec02201e01bf4cf19899de0de7f171511e726618d9ea85534537d15b2ebfd74e2876c501ffffffff09970f055331edf5f93031a82fb909bb1aa6002eb557b4a6edbd858eb966febf0000000049483045022100a2fb27660fbdb3d5781e57a81cc3984cdf180855c6ef7335dd01d2ec35c709b5022069059395a6fa1bbb43ab2235f7f80c73bd3c8d29bc7fd50892c70cf15508a17001ffffffff093930519de533d4330040a695cc8646f61fa748542101b8d3d8345d4d35af700000000047463043021f3046d7bc0279e1c8fe114ccbdee8f15056371c66f0cef0beab44f6f522732f0220686b590b057847912c3e80eae4de68dc6a28c331917fd3671d1ee4aad31c785601ffffffff087d867b365921b9f063a2e58575b86fb52a6ad8d119edcc8714eba24e770a0100000000484730440220020d29a6f465428fd481b1ed11b4b9e2f086e2b6a19aa67c1002f5db65a92fa502205befab5889abb22d4e774633d6073f46827424325317d2813f3b64058fb544b001ffffffff08172d2236ac25430e3bdb64593fd2a440ceb32b007779f6f792f319d187a6570000000048473044022056060b04e790137ae7891d050063c2dda3be5ffbc7f1be30be8d9312949d47a702205634bca2147819b6b9a497783075d78636cd73d1fd263b380317ae1015c9b63601ffffffff0807d4a2de4712a21cf48b89f8667765506bd8a525265c836adbcc43c3fdb3b70000000049483045022100e45854defca9139c4f12ed2d4a8123758978ec9e8c685e580484dbfa72179858022019a354068e28c4807cecb95d85dc6a6b67b83657d8636108f28ba1eddf30037b01ffffffff0300e1f50500000000302ea22c8020749dd6534e79a31aeba03df3b0ea58632a0beffc3411b54b7cc0e714ae2dd61f8103120c008203000401cc706f98000000000023210225f1cbbda1a0c406bb8f6dc7a589d88b2f9e28cd4fdb3f59139f8aff1f5d270aac0000000000000000246a2213782ab829454ca1aafc151cbdef7f187424a6aed348a77cff9c2325a96af68f44ea00000000f55700000000000000000000000000
# Response
# sign
cclib sign 19 '["msg", "hexseed"]'
The sign
method signs a given 32 byte msg
(message) in hex format using the supplied Dilithium hexseed
.
# Arguments
Name | Type | Description |
---|---|---|
msg | (string) | the 32 byte hexmessage to sign |
hexseed | (string) | the seed to sign the message |
# Response
Name | Type | Description |
---|---|---|
msg32 | (string) | the signed message |
pkaddr | (string) | the hashed representation of the Dilithium pubkey |
skaddr | (string) | the hashed representation of the Dilithium privkey |
signature | (string) | the signature generated |
sighash | (string) | the hash of the signature |
# 📌 Examples
# Command
./komodo-cli -ac_name=MUSIG cclib sign 19 '["5175616e74756d20526573697374616e636520697320617765736f6d65212121","a70a8e7d2281beaf0762a11590fb566
d7af32325ae4252609149de37658e2eb5"]'
# Response
# spend
cclib spend 19 '["sendtxid", "scriptPubKey", "hexseed"]'
The spend
method spends the coins recieved in the transaction of id sendtxid
to a scriptPubkey using the supplied seed.
# Arguments
Name | Type | Description |
---|---|---|
sendtxid | (string) | the id of the transaction that sent coins to the handle associated with the seed supplied |
scriptPubKey | (string) | the scriptPubkey to which the coins are to be spent |
hexseed | (string) | the seed used to register the handle which holds the funds |
# Response
Name | Type | Description |
---|---|---|
hex | (string) | the hex to broadcast; use the sendrawtransaction method |
txid | (string) | the transaction id generated when the hex is broadcast |
result | (string) | whether the call executed successfully |
# 📌 Examples
# Command
./komodo-cli -ac_name=MUSIG cclib spend 19 '["18e3a7c746e8eb7a7e1835e54e46ef6f227fb41c7142bf0304b453c0034b31fb","21029b086d4e3e0358f668ccc3da07df6343fb29970b742f0bc128f180994c5222c1ac","a70a8e7d2281beaf0762a11590fb566d7af32325ae4252609149de37658e2eb5"]'
# Response
# Broadcast the hex
./komodo-cli -ac_name=MUSIG sendrawtransaction 0400008085202f8901fb314b03c053b40403bf42711cb47f226fef464ee535187e7aebe846c7a7e318000000007b4c79a276a072a26ba067a56580210225f1cbbda1a0c406bb8f6dc7a589d88b2f9e28cd4fdb3f59139f8aff1f5d270a81409082aa1e061a82c0fd261b98af3a394cea7d269ac4656882335356cd315e426a128eccbbea03b6cfafe2349a193ccc587c08f6e2cdec8d71ce5ad8dbdd60f0bba100af03800113a10001ffffffff02f0b9f505000000002321029b086d4e3e0358f668ccc3da07df6343fb29970b742f0bc128f180994c5222c1ac0000000000000000fd6f0d6a4d6b0d13792ab829454ca1aafc151cbdef7f187424a6aed348a77cff9c2325a96af68f44eafd460d7e7405e78304eb2eb0e65a6e5cea9c82009db2977b7796f053d1ae5751ce9a12df055271025697ab447b5aacec5cd324f1b603407f71e711d7f88bc96915b91b5a8177d683f9b035c6a44aa2ae0a1b4be468c7875b4953139c8480ec5e6e5681e86edb715fd351cc2e4074f1d2905bb181d0072bf3effe370e891303485eb998c642e2b4182d527a06e18e1dc3d695f3278b571964ec59371fb17e6cbdf51c73983d8ea17c567c000b9229416a15dd4a812498840c77df30a0b68560afe1d97ba9b11610f0653f367c62245221d038d68eba0b4d9ed76f05b54e5a628c1ed79b29efe42e19f1956d1d660f45d53a3a9fe2a28692a212298a474ed94429c4760a2cc7db794632cb088de11082c1b6dc3db667329dc6988f1a74104bdf8db9805c98fbac074c187e62903305a4be8aa56ee5642123938493e0592ef288088e3124d0c6f621fa2bbc75812bd462fb5ba083d7e945cbf873c00e2b27b97493af56b83430dbaa5ca91be559ab062b7eccca238dbd756a5b8d4782800cd8ae6d511d2cf83234fa47af57fcd198a95c0ab120cbf448ba80ff2b517d28813e97019a055f62bea952c28d6f0f4f413af1bc34bdb07b01c4ed56447f45a89ef6d8c241926f9a35458ada85037455bced29d22e5e4ca0794155f291fcf96462ff3511df5887c2930134698d3bf8eba86640a07515078c543ae0e2c27e4c39d51da85c3d0bf27989100e112b36ab27c92a0c747c72a5ecad465c2084bc0f84d9782a6bbc07c28e0758d343e5f9f58bf21fc7b9c0c4e4eedeca95418a3d08df03b45505e6926df5742051f5aed11dce0932971e61e219e099438ae07cbb74b9d4372430473661eb2740d6198e7c1dcdc2adcbffb10e7a0320a5c41914201a350bdc69faf68f3ccc81904313672497c2d73aa80d2b0cece6d7687f482aee558d4e1b8f10875c419ad9b43711163c5de99598b9f214f29b0e413dd7dad0082aeae8526339b76bc051bc487c6872bc48f92108a053aad48101352439845c0207914ce503ad8f3bb34ee741ce89283f87e3b63fe1bfccd3ed0fde43224169b852877d6600cbb8d5abbc0c97bb0661439f42f2b35aaa88490aeabff7f783412f192fdb7d8857e20ec773a852dbeca61b9a94af50499e2159ca57caf68d87abd2519a8271187e8ed4cb47dc836a96fc230e99238e4839516f19e132356b31c35a14be7e4a05e3c4965bbe06dc0478768370b755816f727fc567141c53a704377f8f819574c114394665e7864a2fe2287f06bac869548a8a074435df870d9b5b903184efa7b27d57cbaa173efdd687317d0efbc9d33807f2f30ad0169b23a6e7624785ffd036db3abebff5fb9e83c6bcb126f59e8afcc3ece4f394051317e5886209270a591a49ce5a9eee6d57fd71e8ddacb3217cd8e9516c5087a58a2aac9b3244ccede7f8de1ed036d54721e0ed1d4c64173856bb7b9cb29885d94b251e0b81b9c7402dabebd18aac425df134dde8caa698267b293deff4df5d57081ef4a05985af681a0b92e3711157e4e9b39657c76098d6ff7723c7798dfb3ab717e301305aa224beac01a4108848d930f7d745cf985598832141b23ed65c27944e6b1a0a6af68696d31df5e14be28c0da6eef05170fc57c8ca54ac3bf6d0485ed8c56c3d50bfde244ab41bf6567a0da6375d3ccb2e9084e73be94f38afda17e843d8c23e703a7f8b14b52b7e7ff7c793b9ac6ee263265025813b1d0a69b762bddce2fbae197c3e2888abe307418b57b5ac0f2f62b1ae9dca2ff58e11440abf3bb952d1c40556dea5e4cae13982a8f79fe0664aff78328141f1e5ae3eb38b76c8906c540cf02d78ff411df6d433689f7ab3f76cddf0479c201dddb80681d9d0df66a33f9f110d71d93198b9e344a4661d48ae106e7372c578d408559f088a921956be384ce6aaa7e83ca90d6343b099fbc19fa8a7219018bca05cebb38c774cc24e0ac37f736ba1ccdf7b4f6d789cd2a945270bffdce7ddbb0e55512cb08853bd91244569662919d4973601fb21f37c3fc097e14679bb6cdeab7e81745993e630d9bbf75a871e45fb122543991447cd460b95c04fdf8aadf88bd4a1de392391a80fc8984090ba64e9f567fe471099fa887d5ec72f2fd192d88e2c12f3ee51b5e7ad7c06cfbd1becc5c94513a37c863e0c8678073777bd88bba225f4aed3b63cceab77e137c947b87573c29f925f1cb29ddb8bb478111d01b245c950a67637920187c1e2fff3b3ecec1444d9c8311d45e481e0093d54518285f9245c9f55a268e0249181a7986c4c48920a805cffe53ae9df7b894c9fc354c18f5e5cc2630129fd2a761cc93318cea211e934b3e5e74517210569a99578720b35746f25e7a7b8577afc93b5090624d8c337b9013a5050c15fb797a160ed00afc7367999170f6d81ffff30bb7487089a0323dc6702d94c023f2c0154b9308edfa61aca8df3df665f1f39e17c4ec109a68113487e70fac8701207656709bb154cb50301690d9521d06a49f5bff9e8f6e3789640bfd40bbbbec24d4d6842b31a5af7622e827b40e541959f034d491065b2c918d0852c5bd147cce268fb6368a2a08b993344a9bc6d9b74241a3d0cd49a350b6ab7b11d8bb81cfd8a2b51dd3847328b07086f4acb28fc8c04dce254882bb3aa538defd288510d4ae5bdc21f24a6e5efc34da8306bc2c44249930433fc80b0087c23d1f0d0978d2af4a53210ef652588b8400c79098b9eb0d72a0a0e48691037fa84cc2d168a4f964041cf5c41500a0841c988bf5448025c5603ae71fa0e6ce30015c7cc6b5a2d68a38b5e6b94d2b51c2c59c3f4a5718419a0964b42f50ef7e87646a4277bf7d74722a46baa01e24fa2d5fef6cf88df6754615cddb7c360f3adaa1f0652d0164e71c2579ba98e41c99e09d752c086db28b35bb5a5969863cce2011b66cf2f9dd90767d4fb75b9a41e8a71f00b296e99e70f77b718e18b16f2abf9f80da69f6e8bf976c8dc853ce71b38794f5aea7177fcd92dec08613070c29bc25bfb2e7b0759627b57df705e19e1d9c913ce29283078e50beea2f13b4647890e1e9efb2b4464fec741ee582c1f3ddaac2a80cea1bd1445505da5e47ca3791cd28221cf95fe0157d8639a35fdf6bde533220c86087d4a3d2ae07565901cc3334cb553ce1c46cb265ba8d96a43ac0899d73caa1ac336179ee4a4de37e098d5172bcddea4711549817ea9a03fcc59072692493ca9e8bff63be80bcb7866fe0e30716e2993b556850e5584fc2a31ae6df849f287015804c4d77411f26d6027f6217f490690d42c63fe593320fb1bf42d9a6fc5c43b686241f321b14eb7712f67be9adb0fcb494c0a595886c6a5bd53cdc40dd2fe457b7f2b2d08e24a610bd77912a90eaf3556728c88c6fc5096d6f990ee76ecf25d7c2057233256aca0a87558e6c8c9177cd3c72cb79f00c9114dddd8387509a3d42c2d9432b36a4f194ec6de793e0ff0d298a819a9c49c2f2dd18ad6bc2ebd307da5c8accc1fadc7fb5af63ddaa9ddd87141b2dc48999adc9dd2de3f3fc03b64c5e411716d6d7777405e844897f5e004602521824e01f20b55cd22a0efea4e6527a4a83e3bfe51d2f9f9955856d1dc1f9ba908d395cdfa09c913d6af648e7b003c2ae7fdd8ca071bd3178d4125b127e30c397916ddc26253cf99b1f92d416df36eef8a6a3390ef1dfae0094472eebe902e83548b3632688f069bf9df56a3487aa8f40c0fd977d1d5f9a8e5b7c5d9d622a511b1729648921a940f47ba5624018f0c2d2ffd432be4a35fda337ff1c07988585b00bb2d0c4777e8592ee4cb13824e0df605b3a133e3f2b3aa7cfb80caff54abfd960d75815d7b168ab546135041f6216790536cd3622877c7145f71a37e3b4f545c8e2b7a7511c926f922d277b1d79b964d9ded9251f2d4ed331b553a775e03986b7913693d226e4d3103132ff373459703f579def3fabb5ba75db75a46e6daecd1929448aa8c8754146f917ceabf1544edb8e6591d52deb5a76fe70a97fcdaa40f6cb1f5b3909b7722d6c5c80be5246398a7b7fea634676cd566b7902cc41ff420972db2e5b3ec32fdb7c5e3bbed55528dcd8dd95b5776fef3cdb0f47f891f7b845b39fb17d5a36ab486e76a15546869ffb91e7fa8b1524597751ef6dcd1a10d2be2c46a7116d5c77dd7a70116299aa0814a7094f9f998f47ac913ea33c3b0b8cb4daf28a056ee46ec2d5c70ee2ae28f0435d929dcd8351b06e0a977eca513d36de77428cff3ac5caeb2a8a1d839821fb15f8b5ecc3d8264030a3f1d83abd82eaa4d1166c6f898b756e5219e49f45ef1a6568357cac25d01cbddeb7d7657ec026d7de1c2110533f8a71d188e2f69b7845edc83b5c06532514c15dad6d93f682420ab48307413f3d620a97812a79b6cfdf570062c4707c9c5ccdaf38d638ffcbbdae3beb134fa621db08a58e90835496015f3fb0cf703987926a6e11a720d6d8e007942db9832053c6c99277ef30b5ed2e5283dae6856585cae24f4f9d7dd5d12161c38565d63898ccacde4044352577b828797a3a4a5b3b8d3d4dcdfeef0ff083544838babb6ced70d10151d2451616785a0b9dbe6eefc13204c4f7a848e9ca5cfd0d7dbe736393f619cc0cacde400000000000000000000000000000000000000000000000000000000000000000000000000000000000c202938464f24a12050276312810a8b40180800084828a083a202408000121311408308420055225fa43850a109000000000000000000000000000000000000000000000000000000000000000000000000f55700000000000000000000000000
# Response
# verify
cclib verify 19 '["pubtxid", "msg", "sig"]'
The verify
method verifies whether the supplied signature was generated for the msg
(message) by the seed corresponding to the pubtxid
.
The returned handle
is directly associated with the same pubtxid
.
# Arguments
Name | Type | Description |
---|---|---|
pubtxid | (string) | the id of the handle-registration transaction |
msg | (string) | the signed message |
sig | (string) | the signature generated |
# Response
Name | Type | Description |
---|---|---|
sighash | (string) | the hash of the signature |
msg32 | (string) | the signed message |
handle | (string) | the handle that was registered with the seed used to sign the message |
pkaddr | (string) | the hashed representation of the Dilithium pubkey corresponding to the seed |
result | (string) | whether the call executed successfully |
# 📌 Examples
# Command
./komodo-cli -ac_name=MUSIG cclib verify 19 '["ea448ff66aa925239cff7ca748d3aea62474187fefbd1c15fcaaa14c4529b82a","5175616e74756d20526573697374616e636520697320617765736f6d65212121","d89f666a168c6c704a80c63165a93edb1c8c4a23f1e47feb160122669fc081735a66f5c95d1ac524e6bc2e719114e13be356e8e890ba16358464c5498181e2cc6d9f49066588c11f89f89c5f09a3ca122990cbe576c85c81a283a1ef9d69e162dfb6547f5fc09265cac4cca94a30850ee5f6fd638e4d3a9f59576fa1ef6bf621a04f506aa7cbe76bfad672f107131948de8fdc2925e90268bf240de4aa1859a20b529432dedb5253490f0b45295e81e1541e9ffb2c8774b6822c45a038dee590fc9f2ab1826015d37c678d2b9a91349b7f2c78c43379af0ec5dc85206d192142ed14be09acb304d1b8531a3885a2bf48022600b911420ff99340899fe4f7e4c921f10a65948c145ac5f7c685e72bbb23a1ac4557b1a91b3191a5ec7f229254c740a03a4c296fc1249cf953bb9a17f0a1fe6a63b351b3ff8a2bfb0bb0c047564e01dcfa87c5616e1cf09578672c64269b5277cb82b8f054a058b8fed76159bfa82fdcd9b65662f63a1cad4ce74941ebf342760ce1511b435b9d4b77a3aa9c48964543e711a32a8d76de338647ba6f9d0c7582a517fe4f6bc2a25b976ba7214cf88b09857e365780d2c8d5fe158b53c02ffc5083eb83effbf41cc33051214d8b97d510ae4cf76cbc8c2e03c3f17ffed1cc2143d6f6154b9ed8bc7db97a06843ca1de096e4050a81e4bec673bd333380bc824bc80e9a1e6a4dae1846cd5738bca677365e6166ee87ba34b86ac74bcd322be3434fda5ef802a7714248f4854ce39f9c6f9a1249353dbef610b2616f6a083c3699bc7c8e5ca6865cc15fde196b2faa88e3e1126c818185bca2275762d9ec8ec440d0489c0725908c8fd104f99c8bf730bda01e31c202e43f186d09f11c0de4825c49f88ece9ffa23d462c502332210afa9af5110134c35b68718b0f117df6b45b9aa0466c95e95f81ed19794a2dc33cfd58ee4fcb4f824ffdc8e238a32317f2584db98e7bda9b2f661842b3924edaa441dea32b4e5357c3f8d424d48acf3d3f0964e69e64130b2d3c5ebc806135cc53fa8f1e1a04444ac5116177dd08e17c2c29cfa49971ec083cf8ebe424f3e84c4e5630c7b5053f9607a9b4df56195d8a07c3eee4bb265cd6fea253fb7af45855c712b83a0f5c01732fbf73ac8931edaccae71367956c5374f4d7c96c1ffcde9fc2d0d8fbc5eb4fc8d3829be53f1b2e537ac1ee659111438c2a6d11acb4f502594ae617685b1176aba19a79dc9d754b48db84cb6a83c9dbcc4ce0ed6b640d31bfed99df78f8a34521e0fde9bd14e168eeaf6cb4da6a29b48df655fba872312f9f876fcc8125b7b3768046e8f9d28f0c5526b9dc2b26887fe79e0b1e0b065055698ff27c68bb0dbdda057d0b5616cdcc89a8538ee1d030ca6ca6f6db71d0b1cd0f03cdc96c9cb3bb45689e923820d17f36d675a764402bf6b08fe7b3356f75fe51644ee577dc209760c6195afe71c7d8e32fdedd2a035ddf29561252ea92e4f7e674eb0c6a679f1fe4d1a63e3423f3e36e60ce93ec12a4e88bd2546b25d8c702990a55fdc37d1d5bfc1fdb029851464ebecadef443f03eb126bf48a06f43afac89278e9e8b100295137139b7d37706c36d0a3687181cf10ede3a4e2cbcc478831dbbd99eee03f9bcff02a2f1887a9ee85f932d3e22eb43d4541ef48528a921814e1d203086507df78f84bc119afc2febf445660c73e88739d53be3762ae3c6800413cb2d963239b4ce1b0a2634e938df33d20f8e056d56047adca62876c5db389a71a9f11376c39295c69ebf09dd0a30d4d5d91971b6ff60e5a0d755863ba813a0fd8f8a7baab677a455f930308499bbc86c36ceadf1b9c37e6118fae9ce015d5851db272799bf75da81545d57b6a2d36358e1f4f5fdc00e9121a9d531ce52c89a64b24705daa0a8dad8707dc5e11ac6565fd763758b530f7a890cfb1dd7561d94c6df9681bf528252f4c99beb5fdcb2cca134b50ffe69d2160df4bd3c7ec51da9c189c8743f19624c9ec69dfd52bce1a8da90fef8d5294c2f477489bbfc23be3a65d0a797485d0235c40b56fc2aab90fcff1da0a3b065a439cde62d895b1111f33c7ecbb96991908757ff47b053bdb8afca97e5f2acabbc8c37f35185b25ac2c43b8c30aafca78c371ee0c1e0dd7132e603309b702b8de2f185f527fd6b74855599f70353cc3befc3654b557761027cc867dfa1632bb3ad94a5458296588333991d2e16a296450de5e4a0599af4f79a011b02c657ff045a8a95572ce069f3362f82fe7558ad76e1272f45badb32900c1cc47643f5476f9dafbf0f6d5a50da8d2405cea4777e1e1b293a766f448ef6ef94fd185ceeb341e369ff2ec9dfe37a18978557ea22336eee6e57a21614e457a46ef2711f112f925ad111d08c88bb05b0bd9d9f8fe9a53250c562b5f18a2534118a2221b91b1420b801d48115c99f91285483cf5d7a7bd23af0bea1dfc034b6941b9b2dc6181614cfb7328c3f4894485c1dd59b11e646498e3957911d87e3a0e1d602046527b7de329acf1ea0f5a8e9b5112d174004454a11b1e594c1f7f14bc1bb51047042b5d99b8b4e9bd0aa47502dd00557585dd36d19a93c48a935434f59b8aacdef2fadbddd5bba5c55f864e01c7648a16f6c7f35b9d1c08aaaa53e42c2200be756dbeb2ebfb8222f0dffad6683f640c7dab52d1c3d501b7c72628aba1bfd4ee089325e4972e62f8313487864737ad29714417af7357c8ac967a4dc0e8fb3ed55d94dd9094529f6f71a4f6afbc65556e556251b988e751deb1a4a898fa4af1ce50db0173709bf8265259862676ae3ba2a399994b36474ef3b44b18321bdadbbede76bf7e5313e0e197587f7e674edf402a01136fb0d366d5c9e9d6ab804fa73b630585346e6d271cf012b2891ebd85f308c5f97b179c18ee6f4ad6b10e33e9a7e2142b21a06afd5b65b773b1d0a5dc9f879d40ab264069689db4644c3d631bd8efab0c9721525e31d25dcd1af9c71dfa9a5da7cbc84811ec97e63f1f3b3c3f443bb6e59f6c1a115bd336cf2d485b53fafc84f8018c4a2ee1b9319a9b2d7a1e06b8862bc4ba82313d74a9fceabe2eab540fdb1434edb0339df7217b2125ab2bb9079fd1859877ef11e16fdcf7bbb9654be4f829760f51f439e05baa0c283b7576adfd43329cc044416b45cb3078646bcbc69bcb5dd23f3e0ae5a695fe3ac96b0a934696445bc395fb12c5b8d1e4d256c1a61aa79397a6453dc4adf11d79320f0294ad2e95e3ace72f616be3b02b40953b24e3d724baca91d2dc435c22e527df93cd48d65fa3e63f4cf355d97a4ddf2ee87ce09f919846df7a16c13584ad0dd10002e6f166121392eb7c8f081edefa703b73882f61b0f77946e16b4625b6f814df9e7392274387406a05d8fe7c58e664745813a65ce16133e55d49ebfdac252da5682f1a41d51ac38ae579e643098a4ae5172be6fbf9f6c51c124eabb90a28978825f3ed67f53bcdd4f81247121369c5974343ac939c4384088a35ba2473d8e81ad6834f7bdb949b92a21ba258f7b246966d4343e7ea44e4b6f9909cf112a1f25362fe8c684b010f875e994fb87b65aef8ff59b2df4703261a57cbaba9962915d50ae7405c89163a093a21c782a62fa524d4921078f896d61aecca2128a9ce0c3f481cc0cdb16b3666239383e7e180890819297c60a93b2f5841cf665eb5266394a10e6d0afc4f600938826fd13858e88e19b319876168de379162c578b25c4c87f46b47c005ebc79073e4770a46e9ccc5009b19d4a84d68bd68a7bac9fe0bd6a51ebae9ee6e6a7cd082802f0a53c7cdb4a4f3b2d7b15a9fc23bfdc10c88c185938916c0f70ba40dc26e80d86602051de0faa3503841b3ff12ec2cd0ac1bd9d86e2f098ad1246a93d63619d482634bea69a1c883a7b9e35b91fe67b35a02837750f363616a4ed572e8d6dd8595abe0bf1571ad6ebd5b16df8bad53b1d6bdb1e391702c91abf0e8feb3499fddd040e06c46647cecfbef85505b0670f1184878e3ee15bd3d93546a028917ef445a8fc1c26319b00c0b0e41e74e00447a6c5cfd63bfa09d3d68c3ecae03d2335662ee2e79dc907a4f5f91b5650d29020c99b3be715d225a9d8a21cf5394235bf035209052b76f815cebc0afa5993f8eb6ff944a3ce56ec14bd3e3ad84f1bfe05073c3d970082a852efd037537ba299fea304cc6e6c61cfa08e013df36501937f6cbd84cc7057ec8a471ea2e4931287db6c62d923f4c902382cc7ee4f9d49ae9857f59d67bfc58c277e44b1ea3f9582864733d1b898ba98108478dc003012b4010bca9e8ece18e3180b11cb8a31e293951e07ebfba7e770faea8b2f674eb535375f2254a3e20f1e2da32631a4752295ece3b072d21c1fba4d33a3415c9578c1c2052e34d5fabbf957ef2352e0c4e8885461841a3d47436738cc5c53e2c043a424f30458d1ed9d6b6b30cf6a7eda861b540ac25164e00f220496c46f93b3fa7fb7ea8a843ef3b3cde50882422bd9414f858f603c108f2c3c157c0c9eb41c185a27fcdb149e210a1e252a4647496e7477acb5b6c0dbe4fafbff1a26576162a0cef1f502071b1d333650666a91939aa8b0d9eef2fb08101319246d7e9ca8b4b9bac5d0d7f1fa0f25283540516169778385abbfd4e2ff0d141a566a7f8688969ed5d8ef00000000000000000000000000000000000000000000000000000000131c2e3f4f5c0526a000cc00420628b002b0002ced051021a0029004103b8840111402048000ae8f26f33c9de7075175616e74756d20526573697374616e636520697320617765736f6d65212121"]'