Skip to main content

Handling messages

In this section, we will learn how to manage Messages. A Message is a text exchange between activeParticipants of a Topic.

Creating a Message

To create a Message, you must use the create function. To do this, you will need to provide the following information:

  • topic, a reference to the Topic to which you wish to add a message.
  • content, the content of the Message. (optional)
  • attachments, the attachments of the Message. (optional)
  • tags, the Tags related to the Message. (optional)
  • codes, the Codes related to the Message. (optional)

content and attachments are optional but you must provide at least one of them.

The result of the create function is a MessageCreationResult object. To get the Message object, you must use the getMessage function and provide the MessageCreationResult object.

This function may return the created Message or null if the Message is not yet created and needs to be resumed.

const topic = await api.topicApi.create(
[
{
participant: user1DataOwnerId,
role: TopicRole.OWNER,
},
{
participant: user2DataOwnerId,
role: TopicRole.PARTICIPANT,
},
],
'Planet Express Delivery Company',
)

const messageCreationResult: MessageCreationResult<Message> = await api.messageApi.create(
topic,
'Fry, it’s been years since medical school, so remind me. Disemboweling in your species, fatal or non-fatal?',
)

const createdMessage = api.messageApi.getMessage(messageCreationResult)

Get a Message

To retrieve a Message, you must use the get function and provide the Message's id.

const shortMessage = await api.messageApi.get(createdMessage.id)
createdMessage
{
"id": "534f8229-89b0-4efe-b823-c6162d3be2cf",
"rev": "1-a1dfce142932db890f8ab08c45187706",
"created": 1700058613113,
"modified": 1700058613113,
"sent": 1700058613112,
"readStatus": {},
"author": "17e392da-8e36-4e4e-abd7-7eef3e434395",
"responsible": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"tags": {},
"codes": {},
"sender": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"metas": {},
"content": "Fry, it’s been years since medical school, so remind me. Disemboweling in your species, fatal or non-fatal?",
"topicId": "ca26a486-33e5-4199-80f2-f2c593aaa1a6",
"systemMetadata": {
"secretForeignKeys": [],
"cryptedForeignKeys": {},
"delegations": {},
"encryptionKeys": {},
"securityMetadata": {
"secureDelegations": {},
"keysEquivalences": {}
},
"encryptedSelf": "ciM8zIfGWGiIhn4+o3l1AiCL96kQZfw+TMA0isSgE9jH0qdABBeCpA4XS2I8VNLv92l6dqy2H4l13dXd8QArDz5Q7H4uQogjPAZvP3oQdHHw7QR2dYnqJqa4l58Q50pJZu863uZorPbUlk+bP40wPDZQZSh0xs2gHl9MHJf6XeKPaaJEhj73AY8yow3ydeXD",
"tags": {}
},
"attachments": []
}

Creating a long Message

A long Message is a message longer than 2000 characters. Long Message content are stored in an attachment and the truncated content is stored in the content field of the Message.

The process to create a long Message is the same as creating a regular Message. You must provide the following information:

  • topic, a reference to the Topic to which you wish to add a message.
  • content, the content of the Message. (optional)
  • attachments, the attachments of the Message. (optional)
  • tags, the Tags related to the Message. (optional)
  • codes, the Codes related to the Message. (optional)
const longContent = Array.from({ length: 2500 })
.map(() => Math.random().toString(36).substring(2))
.join('')

const longMessageCreationResult = await api.messageApi.create(topic, longContent)

const createdLongMessage = api.messageApi.getMessage(longMessageCreationResult)

Get a long Message

Retrieving a long Message is the same as retrieving a regular Message with an extra step. You must use the get function and provide the Message's id.

Then you can check if the Message is a long Message by checking the isTruncated property (meaning the current Message instance is truncated). If it's a long Message, you must use the loadMessageWithContent function and provide the Message's instance.

const longMessage = await api.messageApi.get(createdLongMessage.id)

let fullLongMessage = longMessage
if (longMessage.isTruncated) {
fullLongMessage = await api.messageApi.loadMessageWithContent(fullLongMessage)
}
longMessage
{
"id": "5c7de872-7688-4834-8299-fc12a533af0f",
"rev": "1-003b37c866c91cf85e2badecf919d712",
"created": 1700058613151,
"modified": 1700058613151,
"sent": 1700058613150,
"readStatus": {},
"author": "17e392da-8e36-4e4e-abd7-7eef3e434395",
"responsible": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"tags": {},
"codes": {},
"sender": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"metas": {},
"content": "qao2tr3my75i6kj2bimrlkmagn0m9brp93ht3ldxwmdxu4bzklf13ii1ozbatv0b8coshjdqr5om3fccpbka3ztaampmb47l30yj5surucxnufwgl4w85l042831vefzufdaizvczhgvylgigc56ay5s1m080f1c7dixyj0lfrhldokf147ekuh9v5pln382k70ttof74vz7qr6h6nxt3fhbf164ceaducmex0jmhn1s2oifivf8antip05r9x4vcy7yss6f8caroj7r0mxqadpcav89am6jcnplpys4t4gcfy5l5vkni9loqx91otk0c646t82p8o0xsmox9jjwts8gb9astjklp27oduvanxgcc50dmq93lreyfiv1z4mx7mwjsq4cdeoa1yri8s1q9f0i1xsor3w4iq2vkf9nmmruplwgl7hod134wbaq5xn81ks1bhsrx34ix5lmhyvp65eiqdvlss8bj1d1pq5d4eu6zdrmbudub97zxccpvydbrq9grs28a0lekwacpvq8qvrjsf8ot2cub1x3wkfn2pbrw0nnwcwyeobs16keyybgplre0rjsr6r2lm51o4vrkx0wvql9g6c3f7jv70rnvfrx4xsbot56ern3gxwn41ctgmjeiqsbocev8ux7wyrqtlrpx03epa2e0ff04gp5v46t8ffs65hlvfaclxuhqbqmeko39pygkvq9v9y3sj6zym4snahcvt0ih9q3izu3dqtrf7s10czu4gms77d33rdhp4bhtlncsiwxawj8wozx2h86xisp10pzm3pvxi1yommw1eez5ms4udcp9zkqd3arpr6w6pm2u5ewy40t2thne6n8wavl187thn24g3c4xe6twq5lr18y6y3eh2n135gt1iu5m19zgfyrhx66atx01k79rsb2kkx6rkjxx8ui59hzi9s3k5eyw42j3b9u65wvy3oxu54f2qhq6mvwsc7wjajzgn3j1m12c9zm7g6r3ub4884tz96mrcqg8jyx6goaqio7habby9j45fr6xaoceufyk8rpw7m9hemdx9mjm60zznjw4asw212tgv8dq2j8r6omm7xjd8yh8w4klp6yz6ywz5eb078cpiafbn0s9h3vgoh5jjromowxc9kqaokw7rgysm38k6fxn2s6d5blte0v8529t14w4blnj42svuksv67ep6qacy4udsikh0581kl9vse4wlsuaivwx24zaj66qw5ky77hm54rjeviaw1zr1sw3z96kwjnq82x6jed2zjjwdp967hnj42dzmbmjbu7th5uje8bm2tpdsdq3b1lxn8iik4cw0pv54zxtukh4eijgpalbsu811zpb9ak918ihipohyx9f1wodfih7756x8y7drznj21i1ok8epi39fmjpm6hi76zz9oovk0dwzge69qjt81u07pdafc89a9t3t6dt5gwv3cxkdgcendh4bl56df23nsw7d594founpr4shdu24mpcnxcmj4v4s9gp0xaafe1xqzutsoytl68wjhdgi1r2wy281xxtmlan36t6wqcd3tc1y62n1hv5di65jb6shbapos71wzkgfwar9iylb704un3p89y3tsgy1nqc3ake52jhk7ons28sk04tf2mijc79t6169ebdq9n4jsrn6qdti3y1nu4jtiqxeo1k42s9zc6x47799cm4joycpzz4lakyaa0trwssqslvjwdqvhhv3p6srgrpp0epsq79rxcufayfhgp9i0tlbkfjj6pqa3e4vmxsqsscckyqud012esss0jjuwzfmllgsh3enozgx46esc2kezf4m0oo2j5zqjk67bzvwxf5tbq02cl9tbezwbjnk90ml121wqmc4fgckoxxft0vlbj6nos6yw0eok8lbuo54vpeyjlebfh2tm90zda1479k872opqh3jkzycpkj5onuqez8jvx4ti4dz92xf7o8zrra6p7kfadwrcjq2scxsgh",
"topicId": "ca26a486-33e5-4199-80f2-f2c593aaa1a6",
"systemMetadata": {
"secretForeignKeys": [],
"cryptedForeignKeys": {},
"delegations": {},
"encryptionKeys": {},
"securityMetadata": {
"secureDelegations": {},
"keysEquivalences": {}
},
"encryptedSelf": "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",
"tags": {}
},
"attachments": [
{
"type": "body",
"ids": [
"7338cab5-3a3d-496a-9471-89a3115e62a1"
]
}
]
}
fullLongMessage
{
"id": "5c7de872-7688-4834-8299-fc12a533af0f",
"rev": "1-003b37c866c91cf85e2badecf919d712",
"created": 1700058613151,
"modified": 1700058613151,
"sent": 1700058613150,
"readStatus": {},
"author": "17e392da-8e36-4e4e-abd7-7eef3e434395",
"responsible": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"tags": {},
"codes": {},
"sender": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"content": "qao2tr3my75i6kj2bimrlkmagn0m9brp93ht3ldxwmdxu4bzklf13ii1ozbatv0b8coshjdqr5om3fccpbka3ztaampmb47l30yj5surucxnufwgl4w85l042831vefzufdaizvczhgvylgigc56ay5s1m080f1c7dixyj0lfrhldokf147ekuh9v5pln382k70ttof74vz7qr6h6nxt3fhbf164ceaducmex0jmhn1s2oifivf8antip05r9x4vcy7yss6f8caroj7r0mxqadpcav89am6jcnplpys4t4gcfy5l5vkni9loqx91otk0c646t82p8o0xsmox9jjwts8gb9astjklp27oduvanxgcc50dmq93lreyfiv1z4mx7mwjsq4cdeoa1yri8s1q9f0i1xsor3w4iq2vkf9nmmruplwgl7hod134wbaq5xn81ks1bhsrx34ix5lmhyvp65eiqdvlss8bj1d1pq5d4eu6zdrmbudub97zxccpvydbrq9grs28a0lekwacpvq8qvrjsf8ot2cub1x3wkfn2pbrw0nnwcwyeobs16keyybgplre0rjsr6r2lm51o4vrkx0wvql9g6c3f7jv70rnvfrx4xsbot56ern3gxwn41ctgmjeiqsbocev8ux7wyrqtlrpx03epa2e0ff04gp5v46t8ffs65hlvfaclxuhqbqmeko39pygkvq9v9y3sj6zym4snahcvt0ih9q3izu3dqtrf7s10czu4gms77d33rdhp4bhtlncsiwxawj8wozx2h86xisp10pzm3pvxi1yommw1eez5ms4udcp9zkqd3arpr6w6pm2u5ewy40t2thne6n8wavl187thn24g3c4xe6twq5lr18y6y3eh2n135gt1iu5m19zgfyrhx66atx01k79rsb2kkx6rkjxx8ui59hzi9s3k5eyw42j3b9u65wvy3oxu54f2qhq6mvwsc7wjajzgn3j1m12c9zm7g6r3ub4884tz96mrcqg8jyx6goaqio7habby9j45fr6xaoceufyk8rpw7m9hemdx9mjm60zznjw4asw212tgv8dq2j8r6omm7xjd8yh8w4klp6yz6ywz5eb078cpiafbn0s9h3vgoh5jjromowxc9kqaokw7rgysm38k6fxn2s6d5blte0v8529t14w4blnj42svuksv67ep6qacy4udsikh0581kl9vse4wlsuaivwx24zaj66qw5ky77hm54rjeviaw1zr1sw3z96kwjnq82x6jed2zjjwdp967hnj42dzmbmjbu7th5uje8bm2tpdsdq3b1lxn8iik4cw0pv54zxtukh4eijgpalbsu811zpb9ak918ihipohyx9f1wodfih7756x8y7drznj21i1ok8epi39fmjpm6hi76zz9oovk0dwzge69qjt81u07pdafc89a9t3t6dt5gwv3cxkdgcendh4bl56df23nsw7d594founpr4shdu24mpcnxcmj4v4s9gp0xaafe1xqzutsoytl68wjhdgi1r2wy281xxtmlan36t6wqcd3tc1y62n1hv5di65jb6shbapos71wzkgfwar9iylb704un3p89y3tsgy1nqc3ake52jhk7ons28sk04tf2mijc79t6169ebdq9n4jsrn6qdti3y1nu4jtiqxeo1k42s9zc6x47799cm4joycpzz4lakyaa0trwssqslvjwdqvhhv3p6srgrpp0epsq79rxcufayfhgp9i0tlbkfjj6pqa3e4vmxsqsscckyqud012esss0jjuwzfmllgsh3enozgx46esc2kezf4m0oo2j5zqjk67bzvwxf5tbq02cl9tbezwbjnk90ml121wqmc4fgckoxxft0vlbj6nos6yw0eok8lbuo54vpeyjlebfh2tm90zda1479k872opqh3jkzycpkj5onuqez8jvx4ti4dz92xf7o8zrra6p7kfadwrcjq2scxsgh5fa27fmk2a7eu1hvmafi6sjxi7zhfceo6i63zn4g08jsip86sh1dh04qgt514eisj06iiryln08ooypb3rtgn9hcrnxl4lys1uefrrfl2fylpb3wadsud65uz85myqhuok4gqb95jsizc482bo4qde85qb1dtj2tzgpsbf8h9xl2i4ii2scjdepn7cdvkkvvfz7lhw3e24i66iyikmox97vpahjx7oeczhlhv48bohpr5tf7f8fmzifjiebah59r8dajt6jr7l6zh50d5mdwhx03dqz93lnw21v65wfxjuef5nwqedqtix9yfn75aicaktlh40x83n1j419jeg8hqd619ry13itryle7czg5fvahanu87opip4pcvfl2lu3jxbcqwt8w4dz143k868360m731mp40zjolgpk2mt48cm2xbta49zd1h6xidqe0mdrcf9x2vm69ftfxs2eg0ti2defumwegbg2l2jruh9c9hzr4k6lepozq85gmgd235u3eu3uv1vrgfq8p28fuezs0yqjr4sfsbadgaiagvzjcmfx1sgr6xbi5x7b3g4pq1oxkug28h626cva39x771d6fnmk0mv1n6djxnn2l2o4wi7pojzisk6rhkgaa8apwbxaajrsiqua6kaqmac1fex1327ng8wrhtx89prndzoub73sbnoedczlx7361qeppmmisbfv24epinxg5bgds80ht6gr1mbqvgpzpk7c78sakhnyasolzxluz13nmo8hv1lks032excnk53lrnqhxargfsn15sr84vqqmxyvsju3j1kwycgxh6tri43z085y17bnw7pdrhsyhfl6dlxlcow14vncl8lm2wva4tkhn5g2g8abnzegwbnkt6kkzl3n55wycykjpmrg76ui40jg6kzljg4r6wi2pfxt4y9sibzxlcxe01k0fs9pntgz1w2vpoit3ldmjx3qoqdmc8jqdqhj6669wcj1bjknki1bukia8aifu71al7xhunwplozsbs1iunhmzzsb7uwzae3vqmad3whxjplq36hol9wh14ht5to4g5756tc9kbfmorn6fhryavycp7e86zb1d89q9wda3xxdhhl8fg2xju50h68cusczcmn0tjhdu6jplvc99pd0kqefimsfi9xhcrecfnrcxbk0k8abih624j5yjmesk0usi7tntfaqetiseu8p7cbhhknv41nbtsz2fw2buowhq6htzzs2jc2r2xcg9ekh0h42yewd7ppllawum3hxg6narpep6bxxr7obd8lv9piv4spi7v155eaqsacspb19tolqbzn55o0br7zuanrb81foi8kdh82lqprhrm35cshvldg5i1wfwao0i9tw0nldpn6tqs49ivhojk4jvdqksalyjp3dgz7fnlgg2daenb2y350mdwft1mi4t1k17r4omsylo4v8sap8bvzw99mflj5xra0civt0orcuwry40vbu4m9hzgnaje6qdhzr8vgn9slabfs9n56lqifgioc3prqf2dh2ftem0cs8yy1j2737wwizmsptoe5wth8tl3bqhzalob7jqeohjacpyodndqbl90nqajsh6sprg253kwusmmnyv3ekez8o2x5d69pb7ltx7zfvguhcqe2ao2mlea8koupl87ae7dordauwvxdcgrfsoeqv0ten41hyaltuqwvkk89deudssbdh0vqkykg5mkukvi13qq8e8uqklecpoq1whvkhym9dbljimghmh2utdhewyd9aocye2f3v4nqn9ztqs5ptpbxlopm2cp0tibz8xe2x92v560nfebq41u99qbuqcxzh4l47814wmcuk1u5uk4l8jqcn8gf7kr04kspadk1kdytcbpmsbhga4wx73sd9g01g7uc4b5x70dduqp1xgcct5gelqldsaxa4it96nszr7b18bh3jxsbip2ifpyitsmnbu1r8uiqqwldgplsefqvdx1wwnrop0zs7piy4vqtlbmysm75ggc41vb6ffb7bzpdy210jb4oklzzq7b43bg8tl2ujw2i3p96erbdyrmp0kf8bz8dw94q27dgybm0w708wvfnh6vy3q5so3ttgjpc66bx8w4f5mqfvzl3pc4uajf67s4vqon3u6dtmfj34c9hy2d2k1g9w3xbg5cth0pr8vz0j58624vji1rajgzeu708j7oq86cjo7l0tw01a4m9p46sfkh73y497k7ck4s27deg260zae02o2rytuyn17w8aflwk0c0a8k8fv05avwy3tb679cwflycsr44ic4qh5wpicewwy6fknkomf7pwcx7ifszudatc28j9qenhxgsg7tm2ddk3oe8yikv0wbj2ghtrfgpqgbgzdq6cvq2c8xiz8wacncp5vyiqkodzidkefnajj90jda5s3xck355in2n43tcqxz0manwcqi38pqjyri2nhkf8v6bce8vo45dph4kt4qwydunao1qi8swyt06ul73o8orzzlivc2uawb5gv28xgv1onw9lobdvbfz1oszue3smunglvzlm7xbub6epeqy15bgjricbdvuvvmypc0mjrl4qxraa1px2mrienr6xj91tjc0d69yu8vk83ihybbasq3o22b67il9ijz9m71dw0yiz2epo5crynsufteiuaonlrjn0a8cjibu190c37sevj2fg6opri5j1l97oge7qkb2nqsqgcmj6oq4x4m0vg78cxxllhvoe5toz8b92dy7re4j2xh4sbv5aksbsb3mennnomw649zaig6wuzpdhgpji74jrkc96dqwxz305f7gveg845q60j5xx0ch6fdw7v45cs90aqwam60drahaj8lmq9wo70wsofbhm6vclpu87ykc9swaorq8l505quyyfchr9zjoi84kar5qxmnnpujw2jg7d854l19akl4t32qd6iya6qr2slf5drj15nt0dvrqfliei8x7uhohdhhfxdfliqzecj9oolx0s3t0g0h6hqti8ughomn6asbzhkowualw8uwuzxbced71vovd7jofuyrq5z9odngn0v22kyfastojdexh2e2l50v9l5m35c5uxyomrm0zjzdebzw8tb2xu2i8pds24udeu0vy7tjjds2f7vvfqq89slz26ttb5yq62gm5yhdppzf8dytqdsatv8ovnn1flyue2l6f3vyeqe990o8v35tt5xee9f0gswy0bq37fj49v26aui8jy7gtfdo3u2jsypj7bg81as5gqapntb7b2zg33g1bypxsn96rajjtt7h1871wtrkn052dv0qaqazv9umak07e7b3u7uiajhmimssujvhfrlguyivm9coo60iqd5fk9fo8vzzhaeudag5ltshu940tledmupukhchiqg617tlmvaojgi8wgkfc1izkyacmm782cjo3krtdfc7hxpbusy9x404carx2gg1w2ptnby7q7ml8t4rzx2j03hbs2j5vgo5m5djgrm4r47y2w1dmnclfc3zok3hzsyd8c50g70ky0zmfztvsrpme79acphoj5q11m32zfboaye73c5cstjgvb4zw4qzph4ban3ynpx2jutejm07d5xo8s336fwhxr1430bsfdqc205wpzjucgf03a10lc1qos20grbeavi469n6sm6e996jhdehwtslnb4y5kpdhy6b7y1msg8mqyj5bokg9w6opz5vaqke0cqfjutnxyki2b7eixfvqcktn2irr7pk2d5n7bxg07ym9ymuvpjez1nfo6o690ox98tedy7pmar6kp71cprv3tofxgw94h5sje7qx1ctpxyihdg1vz4kbc33awnz57jl3ox2izfrj3c4c7bjvtt073ybdyjtiymq27f4ugtj1rt43snblbp7fk4n6gkeqyqt8tilat6ao22kibkp14qrf8hqbj5trblh7g9uqhvbmdo7qqaklr8nhui9titnys2n1q1ilvr9z34jvkgpmivztaxg0qh7drtd4f7oh4kdwhecgxkj9sipb8whv3ai7zht2eqjq4s8nlqpq0h9syny80gzyylzsyhbiib7ucw2n4qptq5od0ra5axhsh9lguwd9853kv8k91vc5h01mco82eb08dj0c6ff3oppid5u3op4ouipvimlsgx0mn4k9w532f7rjfhmigb9gzglb67lxt19njs5vzmlu1uvdqx82dkgjbfp79ztfm14u8e82bfvobfnnd7p4y5n35rcckf5dttiqlw42vqe26gi249d5v1ncriq8nwal2m3j79uwclyjunkjvk3zluzcbggbrkgc0g27qylvksdzyalnc6mx6baijkqey08ng2ckgoy3gz88mmpp34cdvprypphjvwg7jlfqgn0n9v287rhmmbj6opeypugdgtki2iyqmwax42m0ngqaqezoetr02hs9h6i71zxzk3db1tzijxyrdhm751tg13h82d7gd0xawxllfuxgrq8cxhn6k25gcs9bnk1173b85b3uhxp8sww5rn6mn89qng4qsssphnm3q89bq3m3q181mkepzmmwzoikyncbhl1bglvhngjicdaf80s9ddcraf6xgl8e0zmu8tdqifu85z36z0lgss6pebuibqtgc35gvrozn028vtb7zdwr53cw6vbbmwqwmmve9jfm09eryu8tdc9n5elpsfd0b8irp0t0x3qsppcs4clyrt72vfi2i5xvbw781uiacforawononzxc0mif8mr5bdhw947on9pygejah0hcro5sdgid2qidfhircjealzifgy7h7oagrkrqfkofmln2zwb9ka9f9a5wsiv7ehd79dk8r8yu0udhvcuill3f59jcflwqoj4g320iajcwkvnmxxhh6g2l8l8dwy88x89metshuraszpdcutthg2np9zvibod2onvqb68d6uy2gxnnzcb5w9ocj337pbqr1vbyy8dqe2xtuwpl1cql15xwrs6l6egm08xgutcukjsqor2jk9rkc27ns0oym9wxhqdfeivgknb0sg3bkskqn1mq83uw8eqzqppmfbpgfel937gqgqea0atn10gsu8ffypyl7wfydwzbz3i47cq2c72cn9y7322vaolag8ghn48rdr7wnnu31xlcry582qj84u0ms7oingk5so8e20mxhuhdjf9bgwjpj9wcfetnqbkyo42gkgrcewbcje0j7bw7zheyre6dmapnciuolylyg0pfhraho4cdyyujqg3ahan7ns9qiuefg8j504pr59mpl8m10hop1whvj3pwbnqgwcuwkzg91lbds0jmpiyyxlq3d1ojj60vw1rekv76i8wxwsu0xly209zv1r8jsthdiwwpmc2xbbcdxpw349334a48pg0a5p085s2bjz8838ss7v3oxeu9yw6zsx0h7dtoqf7lqxr1yyupzmoj87wn1c5e13i2oy7siyniiqarnvrfh7h4q9s3k27n6o7iei5dauo6txtzsj5jyhfu1f1gnul6pjjd1e3nleqitetk9pydf60tgyfv5uz33yrbjdse8v22uzanmo6gwb2q287ith29nv39hrgsdtajijzw8eheooz5npz4wbpmrjbqsd1qi2rjtbissvx55vgfqj8oyut4seaq9ea50g58rpndcd78rx1ubaotb8fuc7wqcjdu767m7uqh4g14qk5enqmbmr2flcow4w97bwcj1u8sz3dm4su04qe7bamyi0772qjs327bqil28ub6sdtb41s09mzt6feej639rn02ghvdjd7b1t2yzw5i2530kicb9tjdw6e4vk41vs5gwkvdevw2kiukc4sx6xtvyjtehjj917elyao4b0xnm119mpk27d1ux7xt2rar0nfiih2xnb8fjo6d47l0pgw0zv3c60l3lh9dqh9o89tva7x4y3toirv4r8cm95aag9crrgrclvkcwdn0j39h2dgf8fa53oqbkue24x2ek8rs9hadbevz9skk69rpbg5m2jw4b69rsepas9lhklri28fb5fkxpf8y06kqlcsw2u43wjyzdsb9xwty56gg8z98r3oa6gr8ftnn4vp59fgr6zrabc5f84hqz1k0qblw3zuu8c9hdx2g8u5k7is8jfj5qkzos34b8nnlbntx41o4gax63xwaytzi6lez33pw9f9qoa7xuoffsoftf0kym3clpz4vty74wsurhlr8zstdi8sfgfkc38pqlkw85wqpculodmxtgj39bqkwku9t9ds707cm6y8s0t6476xh8z7ca1atw2h3mpibgpb0t99qf3jutn6iymgpjrr65ec01itpuksim4mu4rhvf46qjn2xqpupa6817vwdegzd5938pvomz9sjb2u4yjrxmwto0befkph9484p2uuks6w43mvaay8ayciy0nlu47umnoaqxcjggttvnqkxn2t8o1r215sv9hm2bdus5rwq2frbkpg2y217sr17ophn8pt03f0vlbg9gzmo3h0md8eigz6i6zcxqwj2iqm4ie3cub5iipjpqmznsfaczjcoszmvt2mwce7iysy68wf888narsg713i9wmrm5zdgm673vx1tn9rvdxtc8x1adm29ekgrpsw3sf25cw5kjl1eycft90brlqo2knhxywo812phbcbwdfv9k97qaha5odu0ur454jhj3ynmnskg5osf22v0zc64mvs64m1f7z8h892f2t1idxalxokmu2o7hggjp421dm7yo2qa3mo7vjah8teq1c2ziw8s2i9y1yzoqg8vr8eitdevbz6qlfp376qjq0mq87dk7jx4iqvfp00y1q4rht1vrnfwyvpiaguj3p2ik9z0ciohkohg7i9y6q9hx6jgcxmqarbnj2wz9f0q5k2arxgv2z3miwxgmw9ps9odq7ktgjbz0miuntgbm9udrgfuffk53yz7i49gbiodz0qayvwk89drwsla05yl0zs2c595npxbo66v3nngfkwyzda7fo1keoxvqnvkb6f60umzapond0tfb82nypqmo42hejhb0sop46yirz51n0ehu3i0dzxbm6buaw8f79ohmv0f7rhuh9ccmms5d4121h7or4g91in3h078pmx9vbqzt86yot1tql97hmwrvsi8z9expblryqvul50ojfldfufvd7p3m5k78v4yl5u2tafmz6j5d5rq1c1nuhq1ab3h6kf3skuhqcq5ezpm279hs7th4gunjzll59ac262zwxqrs9dkuq3xw90x5pu6gtzbofy7kgsdih32wff9k7umr8bsf8cm4exgzmbla0400td0cqlddxgcjkkje3w9fb4mi25eg7gyh2pt0jd4njm0fawx8sg7878g66dchogn0kerkgqxo78a3ysnrgt0p9fywb0ybx26vthw4n218ypnqf3ectanwajva470mmr0npmdkxjbyhilhrx7i1pwkk2altgw3emt5ocmiuzs4xydjxqxrce54quniz49far7ilxkxyh5w9s5onaf5mts24x9haq5fn7h837sdx1hw6fuya0p0b2018ndou93oay9lupz1af3uwhnnukm0iru29yhugcha4zz2l0ad48iit51fiqanak99aba8ngwhju2spqyjjqj3rpd2j6ww0tu4ufiat6tzr9k2qrknlnpmodwfx8f0yxnyzi9wk7d7gg9l5ni6iwn9n0txpkte5chwkzi3lahtod6s16wazr8kcbbmmg9h3bf7izfsyf55yv486hkjg0iuag6bifhtd6rt0yydogrfaig7ezkw8ivlnzms9u9lx8jmv91b3ufpl70sbdky33bbnlfec99bgqaiswiskwxdc5req488ufrdxr0v2vtiam6v07qlh6v2fiqpyi9webxknnqjusbfxwzxskqc4rh1i3uz0seb4zpw3f017o6r6q8blw7vnr8106hgbpujgwv1v97ks1kprmii3mqs5wyglf09pgggallqrg1nc0ahez45jn5s20wa1ff94njbgt5r98ilme48njel42pznifsthwo201fplojne7k9rlk8lb2in1jg1ra87svs9q9p2r88zb0u8qsq6esyq4qz6i1ex9g7hvifpj8scbtavpb5ztzriwrqgp0tgzumu67yxp7tyvokcjn4f2hhbvdh2nb210jpg4zfyhajciw4qsyhc2dne67mdmjr1e8rzmfwiuovpgnedjmmjfe8hk0go7hiwmiwfon7zx0kjby546wzfj6j14uzjs9uutrqx4ugrzy6phsmfzbrhtdh4hltsol5dm1zg2mpvofoid81wabkh9oitktdaf6n2z3bzusregy7b7l7v5ptirfbx5ym6jowzrrbfzutobkv4p3dwvl456ld1bdk8mjwigbvr3ho3hetcz70zftdr9mvox2z4h16ocxa2d8nfjs5f1itpy1n1j876l0aljfo8ptavmbq340p0p2s6p4rq3lhln8v02ofp8cyu1f5viqyckgo80k3h2a8ckw090bh2z57wm2exu2x9cde7kwqjqwhr2owabstjh9x1xctfiq38dfz3cr9ex5k7drjhnwkpiw7kulyvae7ao8lpjzs26rt5wut5xaocg63dhuztjj1axnzgx2roj7o79l8dmq2r167ltmg25sur5gc9y13z7evn9l4isb5vdg752fpprtqvfy1pl23rybhlb9c5cfvalhgud7c98f9onjw13q4abwgudgqcpzckzyjiq6v9yk72m2bv7227ihpr58tyldllfolllzn5th89o2tqc68so15ts9lel8tiwfu0n8u6pppuyww3kbtwhtnatv26ffkf9es5ba97wv7spnri82flu0u68kbe8hdq5uc9xf2rb30umti23w36r323dm9jago0j74bq6ov1avvrnacirx60f7v9h7wbq0a9wnp28r501s2klinhwwwyj6dnf2skyqiwrz7jk8tdge7df8ysf9l8ddi34id5ms1nixnebffophcvb99vl45a73gnc9naka82759y80m85byy4p4d5qc2ww2946me35h6ba8uo8lzmm3wifsftumzgphkl6sd3m9sm9cctpoqn941tcc6mui8cdy8zrdpa0rcopbpny01nlj5ujpm8opesgyzn44aqxe2zwxa7aqvhvz90pgxsb3iaerzjgig8u82x71mvivoc2qcy6sctodjbrrtphpu9tdldtrujch3ck65vk8ba694we1d118ysqq7m0dxqfac1nd1gvl2nlcrg4wzglzbhw3001ib6rfnttgy607rioaym5xxn9mkxrrvqxpxr3szy3nvkuwvtnyhok74r1vkr1v3lhk7ou6tm8p2oi4o02i1gvp0l9w0qi5m3lcsm6q6v70xabut4soqava90ua71v5aiaf75jgtsaeshmn3xcw3d3ufjzsvpaljg6draaaeffce0by06wmuv922vivdm5jaamfjmeg1gqvnb7h7y75yggdmeii5zueeznm2yvs0bo4kt02hjdczzuuqzendqdjae1bj4tz3i8c7fei6iq6xyd3ivg50wgkw9cu2snkhkeugm6b67wp3apg4sdh17o3eg3kdzpqiagt5zmenrpyckj12w9iti93ww375xon5duf48tux3bfxl3xd8w2h9933lvl8krfb20ow6hn2bc8sgzydg113zfemtezxisp8aunjul79ak9ftpoz2u2fr6sbqyqyw2onmpefll7zc9s0u0o686bci55kq4bo3q1eeda2zq35n1gvopqxxraps38pftq17jx21yblbe79o4zp0jwnybstmr6jnxsja1dwc0aurl7up3xscxk7imhlz9w0pw8mumce1weyuu5vr015g2g676k8h6mdyr4txem1xlpyoyogi3tgibm40tahfzkkf4pbt430j4inckn5idskop9i3lrnv8hfu5d9tnyba7hocsxclj86xbdup2zf5exkdqmrukj9us2ld066ucl55swnzstp8pj5ryoz1gkcp1n2jfr48uogryp8qbl3u19dsntc46nooz82ozygwzaa04leao7qg3060vxekw4f5nkk0w25poh75fq43op58wd6n8bq4ufa07hb5nclsx8f8myyo3uiri5ztz51d03hhzgscfr8d8xn5p1ei7yhcnbngh5t0u125ukxkb6ykpedcjhowqut2szyilafpcd21gynmaqn8cum9vp2qplwlq8v73mrnsbj9zezg38lu9wmodm296e0fsvwkdkzaq8ezl5dnrzlqht7oyx9nb4w0wtsmjb548vvhuvt8ihxa3us1c2m59g63t9q728z9s8y7v3b3t62c6o19ueai1d360w8s3kk2mzp5eya3wn2fnmrme9k921lig0czjoqcknl68akymvjkvsjb8janj0uumc3ln3sjh3zozplhw099yhw43i6xi8ozffwxxyvcgdfp05isana6xof99kna2emabves01puzehijm8wjz6yordidoehoyyfu4i1fk0g8zgi77wh9gm4fn45kiish5424vzdtf25hsajkzxu0mxte35jf7qc7h2sxdvizbzexxinul91scbn33sutlwmrsisbw7gnna9frldwwq9cdz73bvjjehjx37mfsdmlmv4davauafj8haxuiywzzw54twbfkhzk69wujotq5dqirf55gkaw5y5g3skv3sikcza4qeswwzz57ylxynd92qlzl14tlbykru2c8sg1sdqr4s5icrakyjmf2hmwywp9chmgqucey1wvat1ymmpg08wxkus6x4ok4eslfetr7eupub3gh3v63bdneoei5v8yinj88mrmexz6rkqmue7cc3jmvc9ww95bau1ad19mi7dhu0p4zv3rtzm9f2s3lwohja4hgl667vwevwojwo454xen4jqk6hnzaeev72frmqrsivbb8522pm0rvjiyxhnsl4y5ty74e5zrl0txmeulnen4buh4xjrcsq2xq79pqaok4g09qz127u78fpcbhv9zm4gkpeve268qjgujsxlg9znexoangdnkn9nx9sej8u5fj11xde7m1eg5wpvfdv0p1o7j54u0atfq1n8dv4el84z12nvjqv8uuknrh4hbowoglwpc8t2ohb8jewizou8xb7t4g408tgxsgi8ez1tn61yak8nh9bfcknk7svzdz52u5szgc8r50ggixl17s6z110zllgw591emvpf8d6ckys8qun18fm2d5elxieu58a0kmi9ma9lu66mrb83a62xdglgfmepbbbseacz0o8b0ui9ufi1j64ef0myejcvuyj5xa6peagjgyat48qus7me6b77zmexbrlbtrkj1ydj6pmyhjbfrqccp19olytbo4lwgfb3xoppvavldjqfmj2cwfim9b9m5vy747x8o65lkx322dsouc8521lua8gaoonnckde7xxxd6u2a3t6fwa1sm8k09zd4bxxqhir431zwwzo8uawmid0xot069yattsez129js4cxrl8y4whraj7sfie6kamztzea9zmduh4pnh1u5vg9dzupbq694ebl8nhdriewnuty0ei344mmqwm8zzvc2rl8ebdioqd3kvxfd02jsnzeg22r0oasozgm6l1lea80m8xbi4lb8s251dtz51jym9de7qpnkbbz5xkh5s2e4h3hyouwq5pl592pqe4teee2v4cbyvdw9ipzo57x1vpr4ggocow7arnvim7lihj5kisbawzjonmat60xmrtkp991thh4p0vnca6tmu8ny0ipf97yyy7sihnfjdscyxut6mo40e487wwuiuv3gxtgqiyzny8e8gp1s98pu5brviz2eqovb88kn4qbp9chcxp3ygf0t7oi95tg5gdrbhzo6tzqsrb2liim1ds94artzfm1s3yli4576h0uckevjeo2ke5gyj4yh1vflr0seui4v42815etioz7ajqxtpe75isa2m7t60ya37ncqr7x9e5yyszsk8f5j615sbx25fwlsjjsca4ru1zwtrlld8f4kdy3cv5yeaz1dt68etod4jd53tleut8x8rm6lbg2dtbvc848n0rcqeon4rlxc1d1jsbn1qdkxweboscko97evdniou59lufumgjabroe85mqosmrbfgpip7tcwt5ogb8auh8z0m9wbkcsixi3jg7iia4wxpb9dypv7snx5kfpy83vufjyqvfqc2e5xihrkgwukqxjkjyl84yux93vwea9id4k5awascuaa388n7hlj4l5vyqvgmrvmhc2b52129h6y0he4ywbjyx517xh15fxw0vu1as6ubgho2oic0eggcsqnhcyxb7t263ksty9mn63d8pd7rkti2535a33hp0k1sez45terg1bazpvs3q2wx26v40xq9lahpz9avcc3mn55huhjxqwuwcdl44120hnjwrzf26cema0e3n3jjqwlu9y18w9se3vm2s8xfvick3nen47y1yzqpt49zb7951cf3hq5smzc5dojwoueeqv6p78tgbxwmrxmjwy4j464vfi6nm8udvmxzrg5qdsfbbj4cuq1uu2msn7xb8kd1wnqynyfu2dy1l7ebm53su1zb27jpkw8khhhn77udx0c8s9pw3tzlvuiu6apbc6g7sr7qd6035kpsvfcs392ddley8lner9t8oeii4q0g3bxbtzxaq4q3rglr5oym1nkgnk7nvohkwh6y97qetwwhaucj1tc94ayj545j0nlbt0po5fihltcb5gk3vav4523bztbz1hc2lg1xam2wb2irjm54k2j2v1p9gf2te8jmca83365qgqookoeh6b0l91m2ko6f46h4lpwhifqx9gskin52cig1sxfx9sgrt7f4a464cis6scz33l4beflyqcww2jowrl0jmiagi359wkqogetubkq438u8ee6jx49d6coqqphuha71dln9lflkbuijyxxbaa7ywh8fl4zfikz1naj1ugrkg2nx87e0gia1g3yratmhwd7nr3d8ni84d34wve8yrpltq87533672mm8pm4f3cynaufiou9q0csi6o3onbxbrrl7tjpp5w5flu0k9av52qc4db9epzqk6e54y5itlmqhke3adbhzey6y87bhj6byln42qvf5xwvbf7oprhmhlbelhunmghppwazm0zs7u238x8mhg49gisp3fdojzqfvmwu290s6jieb8ndnkye4ya8h78ru89t4l48emom9m1re2kdjbusfkxw79qbu40pfa2iefffm1amux2evz3wum2yame4d72ail3uig0vz1bxw09fprtahdivju0ebqygr8mclbvd4ioz2r28igpdc3yca5oiy49s5v2zfhlncyfzmxkdh9j3g2e80bt91ny3knisrenfrrzxrgtc4ckfr5iohp7iea9nvchbd3zjijts3p3u62efr4fup3rwtooyx5m5t9eusxw775pg8m5rz4hujcedcmp9ycdnug2n0g1u1ww2j6z62b82689okoxbh3vehfvw2t84vz9nf94nbfd7umkichk474oai9qig9nuwc4srl92pv3ilm111cg552092sw8z1oeidt03i1zi6nxc738l1cdreuqf5mmke6xiorwe7yw9tvrwh70az1anzoy1cm2bk4j3inb835vmrr5ghivd0sxpedofj495bqj99eqqflwj839z93ax5svfozqbjjxcizciqnnrjstnbg17haubr5l0vqkxk2898cqqz0gps4xz15gb7h7vc6zjuat5q93f6gxpxw2r2xw2lruhapzoqbafwdrvcxs32bv109sz7e56qw2yorj5uifllzym9p4wvqzrllaggipifktdx6uu7immaq8d1tfcxd6wsgir2yk629e7cazfslcj11nb4kurlioxov4szfi4zalpeefhnbvb0fvp0t5jhwd2xgcqj6r76qblqj9vc63yqrt56k0tqsbipn2nk59rvwb8novseptc6r8fhv0kcl22hldilboshxfphxpxhhqhiaqn4i7zk75x7waursu7o42lejf9hx42spr022v5xh1vg2rf5505uhp4qgl1xmxiwdp0ui9ouradofym4bvxzkqh55t8gdzmk2lqcih7biukx87ci667e9ytpx4p7hcbtw9xdco6vlovupsmijduipiw78k1qcmnec14df7y81b93t7a7z3y3rmpzfrw1cjb40x81b07ax3ieo138d0lxqziiubx5plrfcopsf94ks3qd7kmr6jkt3638xwznbhsap9jt9pckylaj254ktmb78mlwlmnoadach0jcoig46zkx68vzno3zy99td839sjjm1ehs47rwy1tsvmal0yism85mekli33ki7dsrmx2q2mj1u9e5shtdlimufz3fzwqvq18mxrm8mjsosiyd1vqub0ccy5vhples9kcu1i2se3djxb3yi6jszfc7dcrynut88zcl1a6mrri0sqpevrq71vrui8id8p4rohldp9lz5ns5r2rl0cpnxpa315md25lnrjjdyvv3a16mhmmueffw9jxnmdxa1u62o301j56308030b17deil6hvre4ire2xwj3ucppnqgsyc24lz6ecoeiawgmd6gsm56zjc4tc6cg5f24l149jeu0jafy1xzkocwqy2jxh7bhldpz4x2p4fxlrkvzxh21gygm3nsuqmqfs502g69dr5xnptzvkw5blg1lxirrqfka3d8jbhb0mk4kx7bzibudhnu65x1gva64ij6559r0qozsrkcp91qgrvtdvafasn4mdvggdaa46mmw0adlyec69gt8z7fgetg8a27acxayg4k5bpji3edwn7vyl5zfdayd8r6gkivmhuvcemqs11gf30gyri5fl7xm7nawtlribmcws33t6rsfnwpz0m02folglguakbzevk2bpj86ricucr5sge7e2qanq0gth2pwds3ztpfbubem69oyfhftksn2xqxc611gxzzx498rhhopn0vjtpg9i2hnmqzcmaxz6cwvm68jof7xdw7fpg3ttlbxvyrg6zixp1plygq0nno923acle5zbmacmwruacvrufgxa3i33ijcr6cb0m1x83ycjth3ourf1kcsj8bwtk45r6rguh5ut2seeu4dkc2ppfknv6o4dkp4jcih49ddvqt15pt4whmvfss5alc1g3xrjs4j1ncrihu052e08fof9eshbkwynrrp5iq7095sm4uzgg7k9javtglbbc2dlfzpgxjdlez6oetphpq4bygze9qyhx3dd9g4qb73sonl3voj6nhu9kdzwhyaukusctwdhe51uhz5eu9tkphzg95fs8ol9i0r628tnq43jbltmamdk3mrvh6e3qjqed3ommatbddjpdyiy2lb7slo7bb6ek8zxxgu8gbbwin5ve96mtzpih6cwmgfslqng021zizae6tssw2i50wxrwwcntqk9lax5srsoaqipwly96867i9mrs90i91apg5hpu23xc8ib9apvme19v990fblvkl5v7qiqgolynf3r68v2u3iedtzhjbrw1ngqn4dmgazgertdfkvjnikbve4z8b28f93cy05k1obuy2rrs4zrtxg1r2cjydmb2ibza73hku05sm2e9glp729jymvf0r3kjfkxwfidfhy0pha4aool1ecgrr8fheidhtldem9qvdbvi7hz1rnmj6nrjp7pfzrwrjwg8gav4o89o2vmpr2xxfra8x8jwr9scwjkulx0iam76i8vwkbsd4ed5jclqjtloq44ys2vmj5q6c964hdszg6bzat8sa3pa8xmqlsqyp6971rczbr3np5l0r42s8nlylfu651lk0e8og8ksh78tjtqdap1m7vt2ifpinspnscnx1ygy3k3bpg4p592te1f2rentjc8fjuf3q5e5lfcm4y0mq4xjeoww0mtnnsf6hqrr8806nm7omuj4ltr0fh3cwf63a3envlibcxp8nrbju7t31q6zezkdhfy9gz5901recqwpl1ptfgettil8h73w7j44gygq9uwpah11n56s10hklysfe79ovs48ni3bnpx3ydqx7fe6f964ptl0r7k508qlzvtc8ao9iaibv9dh467vls0hwjb37j4utpli08cfjv0s31wy9fvfkx40x3c2buwevxg7vqal2su64lwx57yy1ci6546xumqs8ovah454hv59g8n27x2p4vpyuagvejzifflk6xhfq36v9qfypoz29zo2gzj5n581ivxc2eilm52s8hnysfcu03ehffmlig7f9jo3cy1km09rcbxf3jtsasumlo2nsif4igmr8pzbyzgsb8d06vob3q9csroz69nnte0ox3jfkqec26facg1wowsaryarwjptcu93p9iwdzyihe2waujewach9ipg60op5qh7f507d8th7rsdugops9e9d5d89yzzcabchg9dutkvh32uwatp8uywwuoigvoaxodro01sy5hqs23ubi7c1uuqpitde6lfpawrtpzoxtgkgc1g9923f1tjwgiblbr05cvilv58bo4ddg7ysu8ijmzvv03bulaagn1u7a7nbcyxr2itnks8u7cfstguej0y2i1vzsby7a2m82mbcyhzx5pdefggx31nfzjqoag2ngurb2d63jyvxdmit8vj3x0nio2lh8w9zjvp2ltka4nqh9eo9lp0oe6bu9r1go68qsetsptsh6tem75phm5vkk6j2plxovh0su5pexk3i1xpi17s2kn83cj44flfeajwergdw68wa0t5qzx9207dar3wu182x7cje8datqsykcr9v585q5p68ybi4njhdciijq0a0jpmdx8ua995qd4nk8bkdosj6tu740wcc8u2pmdpssjwj7nsrq1mpoh5833cmylb1mnkyvxmq9zl0jjaqczsnhqngpli6bmt96jeovxrrtriejqew3l6smq3m5rahn31ubn39nr73ncne3svwms86eun2pvtjx2h7l0mo7zzgclr55d1rzzzigp3eosiu5oxd7ezj49m8tidvxlyhw7vw0rabcty2ktawmce78tbhtp5hu3dcqwwhkeunwkoe9a19rzche0ke3ryip0lrjvubagqvqi25sdb85m12qtlhl3znz2lipdimit14sl2i7c0l0jivusnnkvd7p6wvlqow0t7egfu5ux6w534dn6z7y23tmtzhozf9jlxxfpfwpn0p4xqps3hgcc7nbc4ex3ups9s9d9wulej81d0vjrdjlt18rnl8k58f0naq2wsdfrcy1kq4m4fp7tlb4vdie5naazatrms0vdxrzaucireykmgmbxo4d4fjnzxh0yhs1g1dn2omc21zzlmzzsqegfkavrtxlj9iwhy34ef7siw7d52ejt0xgpvezn6fvhqonpszyqq2gdzgf1jyz7cnhob9ybypq357c59uoq4vbgqkczbx8k6tb8pjbui66jrcogsqbm8sast2un6522ljvlvprfexfks0q4mcyjfai25nhanbadma5wveevdanuold6tij3zvvd3lk63g4hkrdmc57so9p1bcdf6q73ut3onnh5rdur6w0xmx1161e51qh1qq87q2viyyneqgi0b7dxb2kmqy2ycv2620n8qezqvj9kggymq62jr6lluutegz646snjxht931t84awapq684n22ghn5lfhqaby3wkvj3ascm9aj8403a0tq6fsoe2dq7fqywnq2l100r6xp3fhxfn6aht01r9l3467c6fmow5ledlzumetba4qajid2wxggvkttxmlcm5vy2gecwf0fu9ztobzy3hf9qvpx92r1mdp7jm9xf0eylhaeswjau6nesqxmlmzmpqz74c9utbcg34kwbqocdk7j55dkp5o3lwqv01hx03dnenw54bvdlpwx1zpaxfwog8jac94vfyrsb5zjl11ayoofu63g9kqa57c9w2qqj5197c7ay8tlf7j78ejq66sp5phzvighmt9rhej0no3sebvt7axhpnssbsxnotn8hn5h9agrmrxgrf4mm6z7bmidxurwomorzd61d8zuly978ybxb6yxyciyihiqux68ehzzyofvs5kussnpcmip4rze84brdk6shj6lz8005e6gno4hvh3qr01giu0bvgqpsjkjh0zae8fwl2diubsaiydotm4095g9w0bbmhnktbv1mt2bv1bx3swijd1b8pmpa45vzb5iljwbptfgx6c1rjoq9dhrcf7ktbwmfcbjggklt4vqce8kw61txq9exg97f4kq2368z9krllcxtbb2laq3ib3ezv362gj9xc3phw4ggsvgnir8omi8i6sd1rk4hkcfhvdffxnary2vfkslycj9c7o54rew6tn0y76wheglwe8wrdmhtz7nqut2xmvfkye1j764kcjbua3z7gwunaa22yahbboqhehbtd1z4crijw37w7vj1xbz8gh060ve6mgiyr2x4cm1p15pz8pvqri8qifz7k2s4wuczfbv2krsd9ula2aqt8wbswg6gzodlgiqmaftoqe76fypahmvp8nb5htjxoemazaofnejvz5ral5exhh5ca3vfn5dxlaiimhva91xsrnifxy4uoxdlzzcima1tv3lypeufr40aaotbscfzygqgi9lhlhk417mtgpmbr2ogge0lwnc3cschsk2bqwzlr3blqiymjccn5roncklej782abuw9v9hts22qbchhwiql7amzzg8s1d7thja4l92xwqsxpnz0ovbi2gb1sbfg435msdgnqft48dmqrq0qstvjjzlk2kclyh20gpdljv84df549c4t6uc7gt9leyfw4la43rca36aogmlzzetksqky4i9g2c2id4pt762ojkh70pw7szcslaktuy3xplqyql465181lt5rk45mxyt7sn1qvnxv2h2yxvbq2vz68xjbseghvb53f5sbobfn0kkvma01f8ywv1qmd82hhwhbw6njiid148n9xr6bgmdxjg4xtz8l8a1qulo59khluyyuz3hfc4p5phgi4tng5fvx3doi21hmtdhiku85dtjr45pv9yesn7gjsf5toeh7b048s58givtu8f61ersbp6t0j0ln3pey6v948k08394bc3m602k8t3zaqosgad352qsbpkbqdvg7zrbnd3gzd6x1vg4pwbvsbpc4uep69yy5ofmhm0e36fr1iqjf8gxftyfbjcmuvm58wlwryf6rl4ciiprt5zvvxoizslj83w8v0aix3sb0k870h2z4cv1yz2atihukdzt2xkbsrmpojekqssh8dr9smue4j7od3o3m2qa7lf0cuat06oulciua0sl3811wme23juiiez8ysigfm77dhwm6cspnwna2x8nap643e5d1tl6mfvpg5iia2hg4krgt3trzl98xnuqqtj9x9peop1tfmxb7zjyzzggv7qrtpax2pdhtmg8j6x3ftaa7tu4v4nnxvtbjxkhf2mgi1188y36lgp78aei3ae2jrnkia9j76gmpq6pqdav0ae2ieeb3vgyo9xwsx5o3h5efpg4xe8t7ne17w17hjj7igmg6ongcctgixi8xirskebepj4pua0jdwhid8ph0ej1tlh2clvbf19ln3x9ozkewosb7k8zgexquhrmskyy8g7p1vyxxyba6bkibhyyjatf314phm0bc7a2479tvt6wshmdqabpfqtm6j8xa2qc0uqli7saamqm9q9ldmqevc5ctzs8agkw0gzc6uaff6l4jdnr6es3r3a5w6joxxm9fvdk1amal6odzo6f0qt076sg1hln1ki15xyc7yc3lw424e7hixh4hlwwd9njtmiwgmavphkvqiw7502eahlkh5liuxojqjhlgghe241pkrpzbjzokaznig8d96kla4qtyivp2psdyjp2gmw2ie6kyzrvrvtt8m861r566y9lb3pk9gnjqdnogue4qdme08j81lj36929r9ncow25nvf2inb6z0gl0r2xkfhyvhtwnljk5xjn5kiiswhllvrmjdul8yzagssj5mcioofupyi7lad5pk281xynhlzt5gqfx4we5jqclrk2xychqtrowl0jkbjbb2ugrlg0if2lqcefutjd7si8n46e7ey35530xu6po2k19v2t6q7msprl42p7s4rnpgr7go4xmx4mge3nl49d9uqv65b7k7dxmp678jajd0d0624qutr7trgi7950bpvfawzmict6p2hcp5otw94z6f1vljv0ts57rfvh4apdf3nqkti0yvdm90127ocndkv1zf7v1zo9tt2ebzw0mj9yvpwraofynk0fjym7tkihbnboavhujv1dby9nd7mz21b2viyk79raijxu77ir7e4rcakpycp4sgt42gqodgq9kjwxxm8k18d3qheyb1kdueqf6ksjhg3osxw66bitbgcy6tzoyx959nxs69ec29yyye1uuhd4ohlnoedys46a9fygojfey4omobqiqovxhajnhhv3j8hee6uauq1og6yk292aiyy77av6rl1h5t3q1o13hkp7zp7gae414nhf493odcszf6turnkrg7z1es4yzd63rzihjaavf8d9mbwfn1xmwqekbvy7714m3dz9m3lrmqm19o5u9jyd9k0t7wszjvrdqvhdmpcnw7y4dv44axqxz1nfwfzyfhkliijjkqk53aj1v8rgvf73tpm0gnd7jqra5jarycq6ps9as3o1k2wa8k1a3igf5cjlr5zaqosxt1dbxie2njkljm6usldetm8wp3v4hu797r9ogmah3kyepfl8l4y05lifxr9ok3wp79aahx8vvxclnxzp7408zxe0t3127k83ce6npyz7ixie2v9w1gmokolytm5csbem23jnztaku5kafsu6z5ky60y0mm9hshgxy00899ag1bl3x09pmnhpqfgz0fzz81htmpthw4yp28yjur0t0wsxkpt5vc4d63y00g8vndz8b2im65961p49hgwsf2pjbisfe4gz9kn7fv8q3i5tvjuz5t8jxgww3n3vel28t83fxtzu1z9zz9rczcnxvnjcppqmqkxhiplqh1keimfzfs4wm8ygl0svjp9po6sxkptlx5x7c8g3foj2btzzy3dxdo2nv4idptktod96mzhtja7eboy851sipskaf51epk3rxhu4cse7esoxjne91ekybab2pqtc60kpqd0ea16wudoqg5x1e660apkom461i5amfqy3c5z86u08hinidpqeknl47c7eu04dsvugbz0pqgl3tfgho1nmi8dvtqnomzmkattmu7iigaxjgef43m4nex019rskvzk55hza61aqf4nhd2vrpnx5b8n1ycady6cbfeuzve10qsflm8kdvncbkfl1unfyfw5h9562v70cziegv9k2ayg2a31ru8tt4chxsojyyhk2r4a11b50aa6w7wp95h8l3bhk7zwl8ssjbuci1dw0olpomevgfl2hajpdw7h3ownl33l91lae2l3gm6luwy9hkw5lyrpcovavhdxodju7ycrzxt13j06vdiff06hsjudc090bibotc64t91gpqbq06o5jcee423im9l6lxbdywqvylc2aq5mmp06wttzt2egvruaxoajpc0ce8otwuw4q963aqcsh62iist8j017n6idk2fdw7lb79xcnqgpp5kgcwjygb1g9skwl1u0hr9taa6o4y8rbb6ugod7lff3hjn9xfmnhc8v0xlo9dgfovzsgdkv1e5wwrxrhpzx4ahauvuofy6wq8vusc6utv3qfje63hztxpy2890n1ggkf2y6gcmds60nnla7g7aahbtymauhco8vdaqz9whh7zw4jzynz73lfong8922nrcjaz3nn15jepsg3a4kwac5ed9s7hgzbrpll3u16v2tohi7p9qph4hsc5p0l7hf0ew7o82b9qboolqe3ydbl0y1bcrvijlzbczr1kt9qfjpnaad4czsk1pmtzlej0k868nzxpdhsm7ja883t68pzgb5q8ggzkhgjlgsmuzga050m58jl3iebb2nrrt5k0jjffav4miqfhq5zdqu4ybv691pk1u6civxwnj2paml4ergqhhnd0y6u7v5r6nmtvuukvaeq1xaaa59vaophdcu1ze8jiqk49qfspaxxm4fxmhm897te56c95bsef15awn9p92auzwbhvoofc0ejd7jdremrzryeauw6zo8174h8ezrk7rbfrbixjdag2uc3chlmw1zkh2mhp57yrrodlmxpeo9lnd2ojovnj9pfl44bymvwsjnwywstbnprug6uih5kzqs8hkn5h2wypi1txyrvb5raduw5y9manthc8qkqo5xjq5zewh1xsio0id6rprtraower3yxomifuoidrxd02w55i89sn7c7xyjx1x8yj3jkzssbugcby6z0bhjx7ns9iyxg58vlvmqfpjahamsntsb03jlac8cp4wj46oct5v9hq0h5hke4ysnjc1yue7p3g3oumv0xebus4evor052aozuz5l8p1qa64am6022adx4mtbjle35ra397k547u28md5hjydvl8dmkzb91oxbbu1dnysyu7cjeblzxszoxggo3x8w12exkqb5k6a7z5z2g9stwsi8u8gee05umwwysenx3324mzbm9dxju6eqake9cdmqo8xknflr2dw4aj8rzhya7nzcrs8qzu67var59g56lo4mcx5ww2a3krbdvw8m8j6d9dd5fnmj3pkza0xvrk139kr9quvy47lhekt4jibo82hoci48na0jtenjd4tvajx0er48p9my9ht17skiwh88gng6eb9ww9w8e10c457qywv53k6wxdswcru1tvj2r3sbk9nnz1yht1vtfqxdi8p2soiq2s8e5m8vlmy2zrjqwzk8wjb9r4fhibib021byid9vv40rqfzbj7bo9eurmml6dlbsqr0zsgkjpqwmkhl6ay37faw2jzcrk7j2g7hq1p7dh2utipis8vc5u3k5n49rgy8fie0fbmgw9g86esnzb9hsqznmyzs4u8t8mx9t3uq62z212zhre41tqe2l7oo956qdfafp3h6ws0v3nvto2e9w4u5sinhhidhpb6ncpaj71r5jtwno57m5c7otvqc6cx3o0eekimra6r91476ih5f811fga7uf5pjxsayqztxk0sab6dibikbrfhcce68vlavrsyjiww70wm5eie19jh243obmndymnkxosanjg839fu2wxonftg6nbdzbx8e9ycm06kd1yjnyow8976s20cg5eh202yfbfzvs9ew7qmppeh5r14ltfxbqgt1lxjh38fosbnwxe35g3r6vbgi83p1rn76g4mxcgvmb5eaek1w7wp0ypgy539hfyxh5hrmdj8wl3nrm73wimxybvv95hmj5mjhl65kba1itsfda2cjszqjljh8kpsf0l11mb97le3lln40p1lvz04lamvjy5nt6elkzci943l4zvjcrc7149y8y1h1i9lvubparla60x1vxqmnj731xmcw4doadzs8b0dke41gjl2fz9sclacuti3mo6xlxwyyzmkpeo0k8dkjtmpgavkaolkeofmyw8lbopfghxjxrelyps7mn5pmzzzgci1cpngwy7zqxkp159qbmqd94s2r9o2h7qnv4veddjrklnvrgymgovdqisb7opypjeg84cnhgrnvfktfgoqo5cbddvizbg5vouksvgsy35vbu5u5tyv48y9051g3912enkeo1sew7pjo23dlcrw1xfcwxvyrxnllzzuqfj30cdu9r169qkxmcomncuzskfo35c86y233xv6ord7cf4nxin4axxjgah9r9w9y6plp9s3dw6nd2878uoofuju2m474dfq9f2xg7b6fbv2b9flkkmt3qqs5wsigeos0sm1rnla6z4cc6vhdyqq8zhbuhuh0do98p3k9e7mryeqerqugeo9juz6k95vf6zd57czcx5xeui2kda6de7igwhsprfdpc8efggpy54s36kdyfi8s14miex6ipmejf2kkgqq813hqeh414fp9arlftv1wvzc349oxotty48r4y35gfsi7ccbbkg1jwrostm7ziairvlhw3nh9gzl8bvqn0w5imcq6xc1sow9fildb4o2gyoe8ova487spblbpd8ky45chmrahwfm3tyyj4ink0xfbxxgfc3c69nd6vb5j3lo5kswrjz6cd2xise5joqss9rdu2tq9iq66vw8wuwr18du4mrkpoy2z5e83s48ifcldj5gn63bgc37pnym5urmsipwqy09s97jw019trq9dvajap4w2jon7ow731tgtrfkzqcjp1qanjphgx2wdsvbbtwj10qv8xq7qjqls7nelee9fx6rq7lntk2hn1aacn26el97kfhptd96tijxl5tlqlbk4lrqwyyn6a8vz5vfk0dfqareajcyf9l6guh7hqn9g5t241vm6wozgkounqazkl58111nts818vs1fvlevh6cdiysyp8gf9o0mzepmftrubephoyghhd60j4nla1anl49nayumdvty8q3tcgac4mub4s3bhjeehvambui97otnre4ricmg3a8spm0kgg2vupzqjntdaaxk7de3gfikgm6hajp6o78109mla6zgt2ojxrmtcy12w",
"topicId": "ca26a486-33e5-4199-80f2-f2c593aaa1a6",
"systemMetadata": {
"secretForeignKeys": [],
"cryptedForeignKeys": {},
"delegations": {},
"encryptionKeys": {},
"securityMetadata": {
"secureDelegations": {},
"keysEquivalences": {}
},
"encryptedSelf": "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",
"tags": {}
},
"attachments": [
{
"type": "body",
"ids": [
"7338cab5-3a3d-496a-9471-89a3115e62a1"
]
}
]
}

Resume creating a Message

Sometimes something goes wrong when creating a Message, and you need to resume the creation of the Message.

To resume the creation of a Message, you must use the resumeMessageCreation function. To do this, you will need to provide the following information:

  • messageCreationResult, the MessageCreationResult object returned by the create function.
const resumedMessage = await api2.messageApi.resumeMessageCreation(unfinishedMessage)

Create a Message with attachments

To create a Message with attachments, you must use the create function. To do this, you will need to provide the following information:

  • topic, a reference to the Topic to which you wish to add a message.
  • content, the content of the Message. (optional)
  • attachments, the attachments of the Message.
  • tags, the Tags related to the Message. (optional)
  • codes, the Codes related to the Message. (optional)

const attachments: Binary[] = [
new Binary({
contentType: 'text/plain',
data: new ArrayBuffer(200),
filename: 'importantText.txt',
}),
]

const createdMessageWithAttachmentsResult = await api.messageApi.create(
topic,
"Here's a message with an attachment",
attachments,
)

const createdMessageWithAttachments = api.messageApi.getMessage(createdMessageWithAttachmentsResult)
createdMessageWithAttachments
{
"id": "154ed906-91e1-402d-ba66-9a6b80e98c41",
"rev": "1-d1ac93ebca96f568770a20250876fe52",
"created": 1700058613281,
"modified": 1700058613281,
"sent": 1700058613281,
"readStatus": {},
"author": "17e392da-8e36-4e4e-abd7-7eef3e434395",
"responsible": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"tags": {},
"codes": {},
"sender": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"metas": {},
"content": "Here's a message with an attachment",
"topicId": "ca26a486-33e5-4199-80f2-f2c593aaa1a6",
"systemMetadata": {
"secretForeignKeys": [],
"cryptedForeignKeys": {},
"delegations": {},
"encryptionKeys": {},
"securityMetadata": {
"secureDelegations": {},
"keysEquivalences": {}
},
"encryptedSelf": "7PRKMHjUIRjgegBicmo5xjThXTZckFNaaYOy7cQ1/q4VJl0XCCnbxANyBsAEIwyZAcYwHpkFixYqRDTKm5XlSghpTdtyEWDSCUItbOOBegQ=",
"tags": {}
},
"attachments": [
{
"type": "annex",
"ids": [
"185f7ca3-de7a-4269-9cff-7b6a56d2d884"
]
}
]
}

Get a Message with attachments

To retrieve a Message with attachments, you must use the get function and provide the Message's id.

Then, to get the attachments, you must use the getAttachments function and provide the Message's instance.

const messageWithAttachments = await api.messageApi.get(createdMessageWithAttachments.id)

const messageAttachments = await api.messageApi.getAttachments(messageWithAttachments.id)
createdMessageWithAttachments
{
"id": "154ed906-91e1-402d-ba66-9a6b80e98c41",
"rev": "1-d1ac93ebca96f568770a20250876fe52",
"created": 1700058613281,
"modified": 1700058613281,
"sent": 1700058613281,
"readStatus": {},
"author": "17e392da-8e36-4e4e-abd7-7eef3e434395",
"responsible": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"tags": {},
"codes": {},
"sender": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"metas": {},
"content": "Here's a message with an attachment",
"topicId": "ca26a486-33e5-4199-80f2-f2c593aaa1a6",
"systemMetadata": {
"secretForeignKeys": [],
"cryptedForeignKeys": {},
"delegations": {},
"encryptionKeys": {},
"securityMetadata": {
"secureDelegations": {},
"keysEquivalences": {}
},
"encryptedSelf": "7PRKMHjUIRjgegBicmo5xjThXTZckFNaaYOy7cQ1/q4VJl0XCCnbxANyBsAEIwyZAcYwHpkFixYqRDTKm5XlSghpTdtyEWDSCUItbOOBegQ=",
"tags": {}
},
"attachments": [
{
"type": "annex",
"ids": [
"185f7ca3-de7a-4269-9cff-7b6a56d2d884"
]
}
]
}

Set a Message as read

To set a Message as read, you must use the read function and provide some Message references in an array.

const readMessages = await api2.messageApi.read([createdMessage.id, messageWithAttachments])
readMessages
[
{
"id": "534f8229-89b0-4efe-b823-c6162d3be2cf",
"rev": "2-b5a0480364aebc770a99dbd92f9f5d82",
"created": 1700058613113,
"modified": 1700058613113,
"sent": 1700058613112,
"readStatus": {},
"author": "17e392da-8e36-4e4e-abd7-7eef3e434395",
"responsible": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"tags": {},
"codes": {},
"sender": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"metas": {},
"content": "Fry, it’s been years since medical school, so remind me. Disemboweling in your species, fatal or non-fatal?",
"topicId": "ca26a486-33e5-4199-80f2-f2c593aaa1a6",
"systemMetadata": {
"secretForeignKeys": [],
"cryptedForeignKeys": {},
"delegations": {},
"encryptionKeys": {},
"securityMetadata": {
"secureDelegations": {},
"keysEquivalences": {}
},
"encryptedSelf": "ciM8zIfGWGiIhn4+o3l1AiCL96kQZfw+TMA0isSgE9jH0qdABBeCpA4XS2I8VNLv92l6dqy2H4l13dXd8QArDz5Q7H4uQogjPAZvP3oQdHHw7QR2dYnqJqa4l58Q50pJZu863uZorPbUlk+bP40wPDZQZSh0xs2gHl9MHJf6XeKPaaJEhj73AY8yow3ydeXD",
"tags": {}
},
"attachments": []
},
{
"id": "154ed906-91e1-402d-ba66-9a6b80e98c41",
"rev": "2-0514436c151bc5bf7a3b72d8f150f527",
"created": 1700058613281,
"modified": 1700058613281,
"sent": 1700058613281,
"readStatus": {},
"author": "17e392da-8e36-4e4e-abd7-7eef3e434395",
"responsible": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"tags": {},
"codes": {},
"sender": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"metas": {},
"content": "Here's a message with an attachment",
"topicId": "ca26a486-33e5-4199-80f2-f2c593aaa1a6",
"systemMetadata": {
"secretForeignKeys": [],
"cryptedForeignKeys": {},
"delegations": {},
"encryptionKeys": {},
"securityMetadata": {
"secureDelegations": {},
"keysEquivalences": {}
},
"encryptedSelf": "7PRKMHjUIRjgegBicmo5xjThXTZckFNaaYOy7cQ1/q4VJl0XCCnbxANyBsAEIwyZAcYwHpkFixYqRDTKm5XlSghpTdtyEWDSCUItbOOBegQ=",
"tags": {}
},
"attachments": [
{
"type": "annex",
"ids": [
"185f7ca3-de7a-4269-9cff-7b6a56d2d884"
]
}
]
}
]

Filter Messages

To filter Messages, you must use the filter function and then provide the Filter object.

To build a Filter object, you must use the MessageFilter and provide the information you want to filter on.

E.G.: To filter latest Messages of a Topic, you must use the MessageFilter and provide the Topic's id and set the latest property to true to byTransportGuid builder function.

// Filter latest message of a topic
const filter = await new MessageFilter(api2).forSelf().byTransportGuid(topic.id, true).build()

const paginatedList = await api2.messageApi.filterBy(filter)
paginatedList
{
"rows": [
{
"id": "154ed906-91e1-402d-ba66-9a6b80e98c41",
"rev": "2-0514436c151bc5bf7a3b72d8f150f527",
"created": 1700058613281,
"modified": 1700058613281,
"sent": 1700058613281,
"readStatus": {},
"author": "17e392da-8e36-4e4e-abd7-7eef3e434395",
"responsible": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"tags": {},
"codes": {},
"sender": "3ed06450-17e5-47b6-ba4f-7a0a084df56b",
"metas": {},
"content": "Here's a message with an attachment",
"topicId": "ca26a486-33e5-4199-80f2-f2c593aaa1a6",
"systemMetadata": {
"secretForeignKeys": [],
"cryptedForeignKeys": {},
"delegations": {},
"encryptionKeys": {},
"securityMetadata": {
"secureDelegations": {},
"keysEquivalences": {}
},
"encryptedSelf": "7PRKMHjUIRjgegBicmo5xjThXTZckFNaaYOy7cQ1/q4VJl0XCCnbxANyBsAEIwyZAcYwHpkFixYqRDTKm5XlSghpTdtyEWDSCUItbOOBegQ=",
"tags": {}
},
"attachments": [
{
"type": "annex",
"ids": [
"185f7ca3-de7a-4269-9cff-7b6a56d2d884"
]
}
]
}
]
}

Filter Message ids

To filter Messages ids, you must use the match function and then provide the Filter object.


messageIds
[
"154ed906-91e1-402d-ba66-9a6b80e98c41"
]