tx · 3t4G5GERYgzUXMfnuYcEKXmpfy9UkCF4JeCctU6btD7c

3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi:  -0.01400000 Waves

2021.12.13 17:11 [1832587] smart account 3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi > SELF 0.00000000 Waves

{ "type": 13, "id": "3t4G5GERYgzUXMfnuYcEKXmpfy9UkCF4JeCctU6btD7c", "fee": 1400000, "feeAssetId": null, "timestamp": 1639404704715, "version": 2, "chainId": 84, "sender": "3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi", "senderPublicKey": "FRotxVW1MhTQRDvVbMM4yvYGWzBFvHqvMsonvGeEXQUy", "proofs": [ "63Bm3dwSFHmTLCZDqK9s65mrMrYBoD3NCSMqv1STKgXvsEcSvqo9x7maywUsbRnwHgw45To48i8NChL3CDQ4EPnY", "mAW6d4NQVhmkX17codviDxZvaBnbFVHn9grgeVtYT6Wzkkf817ygz3wqTJ2FqmNvmQT3YRTxAT9S6MrQzxkxV3w" ], "script": "base64:AAIFAAAAAAAAEwkIAhIECgIBCBIDCgEIEhQKEggBAQgBAQEBAQEBARgEAQEEGBIECgIBCBIECgIBCBIECgIBCBIFCgMBAQgSAwoBARIDCgEBEgQKAgEBEgASABoPCgJhMRIJa2V5QWN0aXZlGhUKAmEyEg9rZXlBZG1pblB1YktleTEaFQoCYTMSD2tleUFkbWluUHViS2V5MhoVCgJhNBIPa2V5QWRtaW5QdWJLZXkzGicKAmE1EiFrZXlMYXVuY2hwYWREYXRhVHJhbnNhY3Rpb25TdGF0dXMaGAoCYTYSEmtleUxhdW5jaHBhZE5leHRJZBoaCgJhNxIUa2V5TGF1bmNocGFkQWN0aXZlSWQaEwoCYTgSDWtleUluaXRDYWxsZXIaEAoCYTkSCmtleUFkZHJlc3MaEwoCYjESDWtleUluaXRIZWlnaHQaFAoCYjISDmtleVN0YXJ0SGVpZ2h0GhcKAmIzEhFrZXlGaW5hbGlzZUhlaWdodBoSCgJiNBIMa2V5Q29taXNzaW9uGhAKAmI1EgprZXlBc3NldElkGhkKAmI2EhNrZXlUb3RhbFRva2VuQW1vdW50GiAKAmI3EhprZXlUb3RhbEFtb3VudEJ1eUFzc2V0U29sZBoYCgJiOBISa2V5VG9rZW5zUGVyVGlja2V0GhYKAmI5EhBrZXlQcmljZVBlclRva2VuGhYKAmMxEhBrZXlTd29wUGVyVGlja2V0GhwKAmMyEhZrZXlTd29wZmlUaWNrZXRzQW1vdW50Gh0KAmMzEhdrZXlDYW1wYWlnblRva2Vuc0Ftb3VudBocCgJjNBIWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbhoZCgJjNRITa2V5VGlja2V0TGFzdE51bWJlchoZCgJjNhITa2V5R292ZXJuYW5jZVN0YWtlZBoSCgJjNxIMa2V5VXNlclJlZklkGhMKAmM4Eg1rZXlWZXJpZnlIYXNoGhEKAmM5EgtrZXlEdXJhdGlvbhoiCgJkMRIca2V5QW1vdW50QnV5QXNzZXRJbk1hcmtldGluZxorCgJkMhIla2V5QW1vdW50QnV5QXNzZXRJbk1hcmtldGluZ0ZpbmFsaXplZBoZCgJkMxITa2V5VHJhbnNmZXJCdXlBc3NldBoaCgJkNBIUa2V5RnJlZXpTd29wRHVyYXRpb24aHgoCZDUSGGtleUZyZWV6ZUFkZGl0aW9uYWxUb2tlbhoWCgJkNhIQa2V5RnJlZXplVG9rZW5JZBocCgJkNxIWa2V5RnJlZXplVG9rZW5EdXJhdGlvbhodCgJkOBIXa2V5RnJlZXplVG9rZW5QZXJUaWNrZXQaEQoCZDkSC2tleUJ1eVRva2VuGhQKAmUxEg5rZXlDbGFpbVBhcmFtcxohCgJlMhIba2V5SGlnaENvbXBldGl0aW9uQ29taXNzaW9uGhwKAmUzEhZrZXlIaWdoQ29tcGV0aXRpb25TYWxlGhsKAmU0EhVrZXlIQ1RpY2tldExhc3ROdW1iZXIaHgoCZTUSGGtleUhpZ2hDb21wZXRpdGlvbkFtb3VudBoiCgJlNhIca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQxogCgJlNxIaa2V5VXNlckJvdWdodFRpY2tldHNBbW91bnQaFAoCZTgSDmtleVVzZXJUaWNrZXRzGhYKAmU5EhBrZXlVc2VySENUaWNrZXRzGiIKAmYxEhxrZXlVc2VySENCb3VnaHRUaWNrZXRzQW1vdW50GiEKAmYyEhtrZXlVc2VyQXZhaWxhYmxlQWxsb2NhdGlvbnMaJgoCZjMSIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGh4KAmY0EhhrZXlVc2VyQm91Z2h0QWxsb2NhdGlvbnMaGAoCZjUSEmtleVVzZXJDbGFpbVN0YXR1cxogCgJmNhIaa2V5VXNlcldpbm5lZFRpY2tldHNBbW91bnQaGAoCZjcSEmtleVVzZXJGcmVlemVUb2tlbhoMCgJmOBIGb3JhY2xlGhAKAmY5Egpnb3Zlcm5hbmNlGhYKAmcxEhBjb21taXNzaW9uV2FsbGV0GhgKAmcyEhJzdGFraW5nVVNETkFkZHJlc3MaCgoCZzMSBFVTRE4aGAoCZzQSEmFkbWluUHViS2V5U3Rha2luZxoaCgJnNRIUbWF4QWxsb2NhdGlvbnNBbW91bnQaDgoCZzYSCGlzQWN0aXZlGhcKAmc3EhFhY3RpdmVMYXVuY2hwYWRJZBoRCgJnOBILZ2V0QWRtaW5QdWIaEQoCZzkSC2tleUFkbWluUHViGg0KAmgxEgckbWF0Y2gwGgwKAmgyEgZzdHJpbmcaDQoCaDMSB25vdGhpbmcaEgoCaDQSDGFkbWluUHViS2V5MRoSCgJoNRIMYWRtaW5QdWJLZXkyGhIKAmg2EgxhZG1pblB1YktleTMaEgoCaDcSDGdldEFzc2V0SW5mbxoNCgJoOBIHYXNzZXRJZBoOCgJoORIIc3RyaW5nSWQaCgoCaTESBGluZm8aCwoCaTISBXdhdmVzGhgKAmkzEhJnZXRMYXVuY2hwYWROZXh0SWQaFgoCaTQSEHN0YWtlZFVzZG5BbW91bnQaHAoCaTUSFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcaDgoCaTYSCGFzc2V0U3RyGhEKAmk3EgtsYXVuY2hwYWRJZBoKCgJpOBIEaGFzaBoNCgJpORIHYWRkcmVzcxoUCgJqMRIOcHJvamVjdEFkZHJlc3MaEQoCajISC3N0YXJ0SGVpZ2h0Gg4KAmozEghkdXJhdGlvbhoOCgJqNBIIYnV5VG9rZW4aEAoCajUSCmNvbW1pc3Npb24aFQoCajYSD3Rva2Vuc1BlclRpY2tldBoTCgJqNxINcHJpY2VQZXJUb2tlbhoZCgJqOBITc3dvcGZpVGlja2V0c0Ftb3VudBoaCgJqORIUY2FtcGFpZ25Ub2tlbnNBbW91bnQaGQoCazESE3Rva2Vuc1BlckFsbG9jYXRpb24aEwoCazISDXN3b3BQZXJUaWNrZXQaGAoCazMSEnN3b3BGcmVlemVEdXJhdGlvbhoRCgJrNBILY2xhaW1QYXJhbXMaGQoCazUSE0hpZ2hDb21wZXRpdGlvblNhbGUaHgoCazYSGGhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbhoiCgJrNxIcaGlnaENvbXBldGl0aW9uVGlja2V0c0Ftb3VudBobCgJrOBIVZnJlZXplQWRkaXRpb25hbFRva2VuGhIKAms5EgxmcmVlemVQYXJhbXMaFAoCbDESDmxhdW5jaHBhZElkU3RyGhEKAmwyEgskdDA2MzU0NjQyORoPCgJsMxIJcG10QW1vdW50GhAKAmw0EgpwbXRBc3NldElkGhEKAmw1EgskdDA2NDM4NjUxMRoTCgJsNhINcG10U3RyQXNzZXRJZBoSCgJsNxIMcG10QXNzZXROYW1lGhEKAmw4EgtwbXREZWNpbWFscxobCgJsORIVZnJlZXplQWRkaXRpb25hbEVudHJ5GgsKAm0xEgVyZWZJZBoRCgJtMhILJHQwOTAyNDkwOTkaEQoCbTMSCyR0MDkxMDQ5MjU0GhAKAm00EgpidXlBc3NldElkGhMKAm01Eg1idXlBc3NldFN0cklkGhIKAm02EgxidXlBc3NldE5hbWUaFgoCbTcSEGJ1eUFzc2V0RGVjaW1hbHMaEQoCbTgSC3N0YWtlZFN3b3BzGh0KAm05EhdhbGxvd2VkVGlja2V0c0Ftb3VudEFsbBoZCgJuMRITYm91Z2h0VGlja2V0c0Ftb3VudBoaCgJuMhIUYWxsb3dlZFRpY2tldHNBbW91bnQaEwoCbjMSDWZyZWV6ZVRva2VuSWQaEAoCbjQSCnRva2VuUHJpY2UaEwoCbjUSDSR0MDExMTQyMTEyODYaDQoCbjYSB3Rva2VuSWQaFQoCbjcSD3Rva2VuU3RyQXNzZXRJZBoUCgJuOBIOdG9rZW5Bc3NldE5hbWUaEwoCbjkSDXRva2VuRGVjaW1hbHMaEQoCbzESC3RpY2tldFByaWNlGhkKAm8yEhNjb21taXNzaW9uUGVyVGlja2V0GhUKAm8zEg9idXlUaWNrZXRBbW91bnQaHAoCbzQSFmFsbG93ZWRCdXlUaWNrZXRBbW91bnQaIgoCbzUSHGFsbG93ZWRCdXlQcmljZVdpdGhDb21pc3Npb24aDAoCbzYSBmNoYW5nZRoaCgJvNxIUZnJlZXplVG9rZW5QZXJUaWNrZXQaEwoCbzgSDSR0MDEyNDUwMTI1MzcaFQoCbzkSD3BtdEFtb3VudEZyZWV6ZRoWCgJwMRIQcG10QXNzZXRJZEZyZWV6ZRoTCgJwMhINJHQwMTI1NTQxMjY0NRoZCgJwMxITcG10RnJlZXplU3RyQXNzZXRJZBoYCgJwNBIScG10RnJlZXplQXNzZXROYW1lGhcKAnA1EhFwbXRGcmVlemVEZWNpbWFscxoWCgJwNhIQbmVlZEZyZWV6ZVRva2VucxoeCgJwNxIYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzGhwKAnA4EhZsYXN0Qm91Z2h0VGlja2V0TnVtYmVyGhEKAnA5Egtib3VnaHRSYW5nZRohCgJxMRIbbmV3VXNlckJvdWdodFRpY2tldHNOdW1iZXJzGgkKAnEyEgNpbnYaDwoCcTMSCWJhc2VFbnRyeRoTCgJxNBINJHQwMTQ2OTIxNDc2NxoTCgJxNRINJHQwMTQ3NzIxNDkyMhoZCgJxNhITdXNlclVzZG5Jbk1hcmtldGluZxoVCgJxNxIPdXNkbkluTWFya2V0aW5nGhcKAnE4EhFib3VnaHRBbGxvY2F0aW9ucxoTCgJxORINJHQwMTU1OTExNTczNRoiCgJyMRIcYWxsb2NhdGlvblByaWNlV2l0aENvbWlzc2lvbhoaCgJyMhIUYnV5QWxsb2NhdGlvbnNBbW91bnQaEwoCcjMSDSR0MDE4MDQ0MTgxMTkaEwoCcjQSDSR0MDE4MTI0MTgyNzQaGwoCcjUSFWJvdWdodEhDVGlja2V0c0Ftb3VudBoZCgJyNhITaGlnaENvbXBldGl0aW9uU2FsZRoTCgJyNxINJHQwMTk1MjMxOTY2NxobCgJyOBIVYnV5UHJpY2VXaXRoQ29taXNzaW9uGg8KAnI5Egl2cmZIZWlnaHQaEAoCczESCnNlY3JldFdvcmQaDwoCczISCXNhdmVkSGFzaBoOCgJzMxIIY2FsY0hhc2gaEwoCczQSDSR0MDIyNDUyMjI2MDIaEgoCczUSDGNvbW1pc3Npb25IQxoYCgJzNhISdHJhbnNmZXJlZEJ1eUFzc2V0GiEKAnM3Ehtzd29wZmlNZW1iZXJzQnV5QXNzZXRBbW91bnQaHAoCczgSFnN3b3BmaUhDQnV5QXNzZXRBbW91bnQaHAoCczkSFnN3b3BmaU1lbWJlcnNDb21pc3Npb24aFwoCdDESEXN3b3BmaUhDQ29taXNzaW9uGiQKAnQyEh50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcaGAoCdDMSEm1hcmtldGluZ0NvbWlzc2lvbhoTCgJ0NBINdW5zdGFrZUFtb3VudBoVCgJ0NRIPdXNlckNsYWltU3RhdHVzGhMKAnQ2Eg1ib3VnaHRUaWNrZXRzGhMKAnQ3Eg0kdDAyNTQ2MTI1NjExGhMKAnQ4Eg13b25uZWRUaWNrZXRzGhoKAnQ5EhRhd2FpbGFibGVBbGxvY2F0aW9ucxoYCgJ1MRISYWxsb3dlZEFsbG9jYXRpb25zGhMKAnUyEg0kdDAyNjI1ODI2NDAyGhoKAnUzEhR0cmFuc2ZlclRva2Vuc0Ftb3VudBohCgJ1NBIbbm90QWxsb3dlZEFsbG9jYXRpb25zVG9rZW5zGhwKAnU1EhZidXlBc3NldEZvckFsbG9jYXRpb25zGiAKAnU2EhpidXlBc3NldEZvclVud29ubmVkVGlja2V0cxocCgJ1NxIWcmV0dXJuZWRCdXlBc3NldEFtb3VudBoSCgJ1OBIMdHJhbnNmZXJVc2RuGhQKAnU5Eg50cmFuc2ZlclRva2VucxoXCgJ2MRIRdXNlclRva2Vuc0ZyZWV6ZWQaGQoCdjISE2ZyZWV6ZVRva2VuRHVyYXRpb24aFAoCdjMSDmJsb2NrRW5kSGVpZ2h0GgwKAnY0EgZhbW91bnQaEwoCdjUSDSR0MDMwMDc0MzAyMjQaDAoCdjYSBnZlcmlmeRoZCgJ2NxITbXVsdGlTaWduZWRCeUFkbWlucxoYCgJ2OBISYWRtaW5QdWJLZXkxU2lnbmVkGhgKAnY5EhJhZG1pblB1YktleTJTaWduZWQaGAoCdzESEmFkbWluUHViS2V5M1NpZ25lZBoTCgJ3MhINc2lnbmVkQnlBZG1pbhoJCgJ3MxIDZHR4AAAARQAAAAACYTECAAAABmFjdGl2ZQAAAAACYTICAAAAC2FkbWluX3B1Yl8xAAAAAAJhMwIAAAALYWRtaW5fcHViXzIAAAAAAmE0AgAAAAthZG1pbl9wdWJfMwAAAAACYTUCAAAAIWxhdW5jaHBhZF9kYXRhX3RyYW5zYWN0aW9uX3N0YXR1cwAAAAACYTYCAAAAEWxhdW5jaHBhZF9uZXh0X2lkAAAAAAJhNwIAAAATbGF1bmNocGFkX2FjdGl2ZV9pZAAAAAACYTgCAAAAC2luaXRfY2FsbGVyAAAAAAJhOQIAAAAIX2FkZHJlc3MAAAAAAmIxAgAAAAxfaW5pdF9oZWlnaHQAAAAAAmIyAgAAAA1fc3RhcnRfaGVpZ2h0AAAAAAJiMwIAAAAQX2ZpbmFsaXNlX2hlaWdodAAAAAACYjQCAAAACl9jb21pc3Npb24AAAAAAmI1AgAAAAlfYXNzZXRfaWQAAAAAAmI2AgAAABNfdG90YWxfdG9rZW5fYW1vdW50AAAAAAJiNwIAAAAVX3RvdGFsX2J1eV9hc3NldF9zb2xkAAAAAAJiOAIAAAASX3Rva2Vuc19wZXJfdGlja2V0AAAAAAJiOQIAAAAQX3ByaWNlX3Blcl90b2tlbgAAAAACYzECAAAAEF9zd29wX3Blcl90aWNrZXQAAAAAAmMyAgAAABdfdGlja2V0c19zd29wZmlfbWVtYmVycwAAAAACYzMCAAAAE190b2tlbnNfYWNjZXNzX2xpc3QAAAAAAmM0AgAAABZfdG9rZW5zX3Blcl9hbGxvY2F0aW9uAAAAAAJjNQIAAAAkX3RpY2tldF9sYXN0X251bWJlcl9oaWdoX2NvbXBldGl0aW9uAAAAAAJjNgIAAAAMX1NXT1BfYW1vdW50AAAAAAJjNwIAAAAHX3JlZl9pZAAAAAACYzgCAAAADF92ZXJpZnlfaGFzaAAAAAACYzkCAAAACV9kdXJhdGlvbgAAAAACZDECAAAAJ190b3RhbF9wdXJjaGFzZWRfYnV5X2Fzc2V0X2luX21hcmtldGluZwAAAAACZDICAAAAMV90b3RhbF9wdXJjaGFzZWRfYnV5X2Fzc2V0X2luX21hcmtldGluZ19maW5hbGl6ZWQAAAAAAmQzAgAAABNfdHJhbnNmZXJfYnV5X2Fzc2V0AAAAAAJkNAIAAAAVX2ZyZWV6ZV9zd29wX2R1cmF0aW9uAAAAAAJkNQIAAAAYX2ZyZWV6ZV9hZGRpdGlvbmFsX3Rva2VuAAAAAAJkNgIAAAAQX2ZyZWV6ZV90b2tlbl9pZAAAAAACZDcCAAAAFl9mcmVlemVfdG9rZW5fZHVyYXRpb24AAAAAAmQ4AgAAABhfZnJlZXplX3Rva2VuX3Blcl90aWNrZXQAAAAAAmQ5AgAAAApfYnV5X3Rva2VuAAAAAAJlMQIAAAANX2NsYWltX3BhcmFtcwAAAAACZTICAAAAG19oaWdoX2NvbXBldGl0aW9uX2NvbWlzc2lvbgAAAAACZTMCAAAAFl9oaWdoX2NvbXBldGl0aW9uX3NhbGUAAAAAAmU0AgAAABNfdGlja2V0X2xhc3RfbnVtYmVyAAAAAAJlNQIAAAAZX3RpY2tldHNfaGlnaF9jb21wZXRpdGlvbgAAAAACZTYCAAAAJl90b3RhbF9idXlfYXNzZXRfc29sZF9oaWdoX2NvbXBldGl0aW9uAAAAAAJlNwIAAAAPX2JvdWdodF90aWNrZXRzAAAAAAJlOAIAAAAPX3RpY2tldHNfbnVtYmVyAAAAAAJlOQIAAAAgX3RpY2tldHNfbnVtYmVyX2hpZ2hfY29tcGV0aXRpb24AAAAAAmYxAgAAACBfYm91Z2h0X3RpY2tldHNfaGlnaF9jb21wZXRpdGlvbgAAAAACZjICAAAAHV9hdmFpbGFibGVfcHVyY2hhc2VfbWFya2V0aW5nAAAAAAJmMwIAAAAhX3B1cmNoYXNlZF9idXlfYXNzZXRfaW5fbWFya2V0aW5nAAAAAAJmNAIAAAATX2JvdWdodF9hbGxvY2F0aW9ucwAAAAACZjUCAAAADV9jbGFpbV9zdGF0dXMAAAAAAmY2AgAAAA9fdGlja2V0c19yZXN1bHQAAAAAAmY3AgAAABRfZnJlZXplX3Rva2VuX2Ftb3VudAAAAAACZjgJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVTpRaoekC86rvG6DuYumpJfGpiE4fNiswgAAAAAAmY5CQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUqvpp3oH0E1KFyj8uOohRsxnqmBxZ8g0tAAAAAAJnMQkBAAAAB0FkZHJlc3MAAAABAQAAABoBVIwpHfmxeVLLCX5an9rXLwYHFIPsDN0RSQAAAAACZzIJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVS5ic3PR3G6l3LsuEUPM7CqSYXRDXgyAm0AAAAAAmczAQAAACBvJKPKqzDcUimY6CxhWu5afyNNwi11u+mdqlTg0tAHwQAAAAACZzQBAAAAIATPdeVk0MEPTme5HxNkxBoN6oQkQjF9M5BdQFgKnZNKAAAAAAJnNQAAAAAAAAAAAgAAAAACZzYJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAACYTEGAAAAAAJnNwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAACYTcA//////////8BAAAAAmc4AAAAAQAAAAJnOQQAAAACaDEJAAQdAAAAAgUAAAACZjgFAAAAAmc5AwkAAAEAAAACBQAAAAJoMQIAAAAGU3RyaW5nBAAAAAJoMgUAAAACaDEJAAJZAAAAAQUAAAACaDIEAAAAAmgzBQAAAAJoMQkAAAIAAAABAgAAABlBZG1pbiBwdWJsaWMga2V5IGlzIGVtcHR5AAAAAAJoNAkBAAAAAmc4AAAAAQUAAAACYTIAAAAAAmg1CQEAAAACZzgAAAABBQAAAAJhMwAAAAACaDYJAQAAAAJnOAAAAAEFAAAAAmE0AQAAAAJoNwAAAAEAAAACaDgEAAAAAmgxBQAAAAJoOAMJAAABAAAAAgUAAAACaDECAAAACkJ5dGVWZWN0b3IEAAAAAmlkBQAAAAJoMQQAAAACaDkJAAJYAAAAAQUAAAACaWQEAAAAAmkxCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAACaWQJAAEsAAAAAgkAASwAAAACAgAAAAZBc3NldCAFAAAAAmg5AgAAAA4gZG9lc24ndCBleGlzdAkABRUAAAADBQAAAAJoOQgFAAAAAmkxAAAABG5hbWUIBQAAAAJpMQAAAAhkZWNpbWFscwMJAAABAAAAAgUAAAACaDECAAAABFVuaXQEAAAAAmkyBQAAAAJoMQkABRUAAAADAgAAAAVXQVZFUwIAAAAFV0FWRVMAAAAAAAAAAAgJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAAmkzAAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAJhNgAAAAAAAAAAAQEAAAACaTQAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAAmcyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxycGRfYmFsYW5jZV8JAAJYAAAAAQUAAAACZzMCAAAAAV8JAAQlAAAAAQUAAAAEdGhpcwAAAAAAAAAAAAEAAAACaTUAAAABAAAAAmk2AwkAAAAAAAACBQAAAAJpNgIAAAAFV0FWRVMJAAUWAAAABAUAAAAEdW5pdAIAAAAFV0FWRVMCAAAABVdBVkVTAAAAAAAAAAAIBAAAAAJoOQUAAAACaTYEAAAAAmlkCQACWQAAAAEFAAAAAmk2BAAAAAJpMQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEFAAAAAmlkCQABLAAAAAIJAAEsAAAAAgIAAAAGQXNzZXQgBQAAAAJoOQIAAAAOIGRvZXNuJ3QgZXhpc3QJAAUWAAAABAUAAAACaWQFAAAAAmg5CAUAAAACaTEAAAAEbmFtZQgFAAAAAmkxAAAACGRlY2ltYWxzAAAADAAAAAFpAQAAAA1oYXNoaW5nUmFuZG9tAAAAAgAAAAJpNwAAAAJpOAMJAQAAAAEhAAAAAQUAAAACZzYJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAACaDQJAARMAAAAAgUAAAACaDUJAARMAAAAAgUAAAACaDYFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmM4BQAAAAJpOAUAAAADbmlsAAAAAWkBAAAACmluaXRDYWxsZXIAAAABAAAAAmk5AwkBAAAAASEAAAABBQAAAAJnNgkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAJoNAkABEwAAAACBQAAAAJoNQkABEwAAAACBQAAAAJoNgUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAAmE4BQAAAAJpOQUAAAADbmlsAAAAAWkBAAAABGluaXQAAAASAAAAAmoxAAAAAmoyAAAAAmozAAAAAmo0AAAAAmo1AAAAAmo2AAAAAmo3AAAAAmo4AAAAAmo5AAAAAmsxAAAAAmsyAAAAAmszAAAAAms0AAAAAms1AAAAAms2AAAAAms3AAAAAms4AAAAAms5AwkBAAAAASEAAAABBQAAAAJnNgkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAAiE9AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAACYTgCAAAAAAkAAAIAAAABAgAAAClPbmx5IHByb2plY3QgYWRtaW4gY2FuIGNhbGwgaW5pdCBmdW5jdGlvbgMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQAAZgAAAAIFAAAABmhlaWdodAUAAAACajIJAAACAAAAAQIAAAAzU3RhcnQgaGVpZ2h0IG11c3QgYmUgZ3JlYXRlciB0aGFuIGJsb2NrY2hhaW4gaGVpZ2h0AwMFAAAAAms4CQEAAAACIT0AAAACCQABkAAAAAEFAAAAAms5AAAAAAAAAAADBwkAAAIAAAABAgAAACRGcmVlemUgcGFyYW1zIGxpc3QgbXVzdCBoYXZlIDMgaXRlbXMEAAAAAmk3CQEAAAACaTMAAAAABAAAAAJsMQkAAaQAAAABBQAAAAJpNwQAAAACbDIJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAJsMwgFAAAAAmwyAAAAAl8xBAAAAAJsNAgFAAAAAmwyAAAAAl8yBAAAAAJsNQkBAAAAAmg3AAAAAQUAAAACbDQEAAAAAmw2CAUAAAACbDUAAAACXzEEAAAAAmw3CAUAAAACbDUAAAACXzIEAAAAAmw4CAUAAAACbDUAAAACXzMEAAAAAmw5AwUAAAACazgJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAAEsAAAAAgUAAAACbDEFAAAAAmQ1BgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAAAmwxBQAAAAJkNgkAAZEAAAACBQAAAAJrOQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJsMQUAAAACZDcJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAJrOQAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJsMQUAAAACZDgJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAJrOQAAAAAAAAAAAgUAAAADbmlsBQAAAANuaWwJAAROAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJsNgIAAAAKX2xhdW5jaHBhZAUAAAACaTcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAAmE2CQAAZAAAAAIFAAAAAmk3AAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAACbDEFAAAAAmE5BQAAAAJqMQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJsMQUAAAACYjEFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJsMQUAAAACYjIFAAAAAmoyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmwxBQAAAAJjOQUAAAACajMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAAJsMQUAAAACZDkFAAAAAmo0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmwxBQAAAAJkNAUAAAACazMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAACbDEFAAAAAmI2BQAAAAJsMwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAAAmwxBQAAAAJiNQUAAAACbDYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAACbDEFAAAAAmI0BQAAAAJqNQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJsMQUAAAACYzUAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAACbDEFAAAAAmI4BQAAAAJqNgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJsMQUAAAACYjkFAAAAAmo3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmwxBQAAAAJjMQUAAAACazIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAACbDEFAAAAAmMyBQAAAAJqOAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJsMQUAAAACYzMFAAAAAmo5CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmwxBQAAAAJjNAUAAAACazEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAAJsMQUAAAACZTEJAAS5AAAAAgUAAAACazQCAAAAASwJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAAEsAAAAAgUAAAACbDEFAAAAAmUzBQAAAAJrNQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJsMQUAAAACZTIFAAAAAms2CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmwxBQAAAAJlNQUAAAACazcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAAmE3BQAAAAJpNwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAJhOAIAAAAABQAAAANuaWwFAAAAAmw5AAAAAWkBAAAAEGNvbW1pdFN3b3BmaVNhbGUAAAACAAAAAmk3AAAAAm0xBAAAAAJtMgkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAAAmwzCAUAAAACbTIAAAACXzEEAAAAAmw0CAUAAAACbTIAAAACXzIEAAAAAm0zCQEAAAACaTUAAAABCQEAAAAFdmFsdWUAAAABCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACZDkEAAAAAm00CAUAAAACbTMAAAACXzEEAAAAAm01CAUAAAACbTMAAAACXzIEAAAAAm02CAUAAAACbTMAAAACXzMEAAAAAm03CAUAAAACbTMAAAACXzQEAAAAAm04CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAAmY5CQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAJjNgAAAAAAAAAAAAQAAAACbTkJAABpAAAAAgUAAAACbTgJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYzEEAAAAAm4xCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmk3BQAAAAJlNwAAAAAAAAAAAAQAAAACbjIJAABlAAAAAgUAAAACbTkFAAAAAm4xBAAAAAJqMgkBAAAABXZhbHVlAAAAAQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmIyBAAAAAJqMwkBAAAABXZhbHVlAAAAAQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmM5BAAAAAJrOAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmQ1BwMJAQAAAAEhAAAAAQUAAAACZzYJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAIhPQAAAAIFAAAAAmc3BQAAAAJpNwkAAAIAAAABAgAAADdUaGVyZSBpcyBubyBhY3RpdmUgbGF1bmNocGFkIG9yIHRoaXMgbGF1bmNocGFkIGlzIGVuZGVkAwkAAGYAAAACBQAAAAJqMgUAAAAGaGVpZ2h0CQAAAgAAAAECAAAAHkxhdW5jaHBhZCBzYWxlIG5vdCBzdGFydGVkIHlldAMJAABmAAAAAgUAAAAGaGVpZ2h0CQAAZAAAAAIFAAAAAmoyBQAAAAJqMwkAAAIAAAABAgAAABRMYXVuY2hwYWQgc2FsZSBlbmRlZAMDCQEAAAABIQAAAAEFAAAAAms4AwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQYJAQAAAAIhPQAAAAIFAAAAAmw0BQAAAAJtNAcJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAGE9uZSBhdHRhY2hlZCBwYXltZW50IGluIAUAAAACbTYCAAAACSBleHBlY3RlZAMDBQAAAAJrOAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAIGCQEAAAACIT0AAAACBQAAAAJsNAUAAAACbTQHBAAAAAJuMwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJkNgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAClUd28gYXR0YWNoZWQgcGF5bWVudHMgZXhwZWN0ZWQ6IEZpcnN0IGluIAUAAAACbTYCAAAADCwgc2Vjb25kIGluIAUAAAACbjMDAwkAAGcAAAACAAAAAAAAAAAABQAAAAJtOQYJAABnAAAAAgAAAAAAAAAAAAUAAAACbjIJAAACAAAAAQIAAAAqTm90IGVub3VnaHQgU1dPUCBpbiBzdGFraW5nIHRvIGJ1eSB0aWNrZXRzBAAAAAJuNAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJiOQQAAAACajYJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYjgEAAAAAm41CQEAAAACaTUAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmI1BAAAAAJuNggFAAAAAm41AAAAAl8xBAAAAAJuNwgFAAAAAm41AAAAAl8yBAAAAAJuOAgFAAAAAm41AAAAAl8zBAAAAAJuOQgFAAAAAm41AAAAAl80BAAAAAJvMQkAAGsAAAADBQAAAAJqNgUAAAACbjQJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAACbjkAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAAAm8yCQAAawAAAAMFAAAAAm8xCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmI0AAAAAAAAAABkBAAAAAJvMwkAAGkAAAACBQAAAAJsMwkAAGQAAAACBQAAAAJvMQUAAAACbzIEAAAAAm80CQABlwAAAAEJAARMAAAAAgUAAAACbzMJAARMAAAAAgUAAAACbjIFAAAAA25pbAQAAAACbzUJAABoAAAAAgUAAAACbzQJAABkAAAAAgUAAAACbzEFAAAAAm8yBAAAAAJvNgkAAGUAAAACBQAAAAJsMwUAAAACbzUDCQAAAAAAAAIFAAAAAm8zAAAAAAAAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAxOb3QgZW5vdWdodCAFAAAAAm02AgAAAA8gdG8gYnV5IHRpY2tldHMDCQEAAAACIT0AAAACBQAAAAJvNgAAAAAAAAAAAAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFldyb25nIHBheW1lbnQuIFRvIGJ1eSAJAAGkAAAAAQUAAAACbzQCAAAAGHRpY2tldHMgeW91IG5lZWQgdG8gcGF5IAkAAaQAAAABBQAAAAJvNQUAAAACbTYEAAAAAmw5AwUAAAACazgEAAAAAm4zCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmQ2BAAAAAJvNwkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJkOAQAAAACbzgJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAdhc3NldElkBAAAAAJvOQgFAAAAAm84AAAAAl8xBAAAAAJwMQgFAAAAAm84AAAAAl8yBAAAAAJwMgkBAAAAAmg3AAAAAQUAAAACbDQEAAAAAnAzCAUAAAACcDIAAAACXzEEAAAAAnA0CAUAAAACcDIAAAACXzIEAAAAAnA1CAUAAAACcDIAAAACXzMEAAAAAnA2CQAAaAAAAAIFAAAAAm83BQAAAAJvMwMDCQEAAAACIT0AAAACBQAAAAJwMwUAAAACbjMGCQEAAAACIT0AAAACBQAAAAJwNgUAAAACbzkJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABBZb3UgbmVlZCB0byBhZGQgCQABpAAAAAEFAAAAAnA2AgAAAAEgBQAAAAJwNAIAAAAUIGFzIGEgc2Vjb25kIHBheW1lbnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmk3BQAAAAJmNwUAAAACbzkFAAAAA25pbAUAAAADbmlsBAAAAAJwNwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJpNwUAAAACZTgCAAAAAAQAAAACcDgJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYzUEAAAAAnA5CQABLAAAAAIJAAEsAAAAAgkAAaQAAAABCQAAZAAAAAIFAAAAAnA4AAAAAAAAAAABAgAAAAEtCQABpAAAAAEJAABkAAAAAgUAAAACcDgFAAAAAm80BAAAAAJxMQkAASwAAAACBQAAAAJwNwMJAQAAAAIhPQAAAAIFAAAAAnA3AgAAAAAJAAEsAAAAAgIAAAABLAUAAAACcDkJAAEsAAAAAgIAAAAABQAAAAJwOQQAAAACcTIDCQAAAAAAAAIFAAAAAm00BQAAAAJnMwkAA/wAAAAEBQAAAAJnMgIAAAAMbG9ja05ldXRyaW5vBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAAAmw0BQAAAAJsMwUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAJxMgUAAAACcTIEAAAAAnEzCQAETgAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmk3BQAAAAJlNwkAAGQAAAACBQAAAAJuMQUAAAACbzQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYzUJAABkAAAAAgUAAAACcDgFAAAAAm80CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmk3BQAAAAJlOAUAAAACcTEFAAAAA25pbAUAAAACbDkDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmk3BQAAAAJjNwkABE4AAAACBQAAAAJxMwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJpNwUAAAACYzcFAAAAAm0xBQAAAANuaWwFAAAAAnEzCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABRjb21taXRBY2Nlc3NMaXN0U2FsZQAAAAIAAAACaTcAAAACbTEEAAAAAnE0CQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAACbDMIBQAAAAJxNAAAAAJfMQQAAAACbDQIBQAAAAJxNAAAAAJfMgQAAAACcTUJAQAAAAJpNQAAAAEJAQAAAAV2YWx1ZQAAAAEJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJkOQQAAAACbTQIBQAAAAJxNQAAAAJfMQQAAAACbTUIBQAAAAJxNQAAAAJfMgQAAAACbTYIBQAAAAJxNQAAAAJfMwQAAAACbTcIBQAAAAJxNQAAAAJfNAQAAAACcTYJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACaTcFAAAAAmYzAAAAAAAAAAAABAAAAAJxNwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmQxAAAAAAAAAAAABAAAAAJxOAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJpNwUAAAACZjQAAAAAAAAAAAAEAAAAAmo1CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmI0BAAAAAJuNAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJiOQQAAAACazEJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYzQEAAAAAnE5CQEAAAACaTUAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmI1BAAAAAJuNggFAAAAAnE5AAAAAl8xBAAAAAJuNwgFAAAAAnE5AAAAAl8yBAAAAAJuOAgFAAAAAnE5AAAAAl8zBAAAAAJuOQgFAAAAAnE5AAAAAl80BAAAAAJyMQkAAGsAAAADCQAAawAAAAMFAAAAAm40BQAAAAJrMQkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAAJuOQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgkAAGQAAAACAAAAAAAAAABkBQAAAAJqNQAAAAAAAAAAZAQAAAACajIJAQAAAAV2YWx1ZQAAAAEJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJiMgQAAAACajMJAQAAAAV2YWx1ZQAAAAEJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJjOQMJAQAAAAEhAAAAAQUAAAACZzYJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAIhPQAAAAIFAAAAAmc3BQAAAAJpNwkAAAIAAAABAgAAADdUaGVyZSBpcyBubyBhY3RpdmUgbGF1bmNocGFkIG9yIHRoaXMgbGF1bmNocGFkIGlzIGVuZGVkAwkAAGYAAAACBQAAAAJqMgUAAAAGaGVpZ2h0CQAAAgAAAAECAAAAHkxhdW5jaHBhZCBzYWxlIG5vdCBzdGFydGVkIHlldAMJAABmAAAAAgUAAAAGaGVpZ2h0CQAAZAAAAAIFAAAAAmoyBQAAAAJqMwkAAAIAAAABAgAAABRMYXVuY2hwYWQgc2FsZSBlbmRlZAMDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABBgkBAAAAAiE9AAAAAgUAAAACbDQFAAAAAm00CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABhPbmUgYXR0YWNoZWQgcGF5bWVudCBpbiAFAAAAAm02AgAAAAkgZXhwZWN0ZWQDCQAAZwAAAAIFAAAAAnE4BQAAAAJnNQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARWW91IGNhbiBidXkgb25seSAJAAGkAAAAAQUAAAACZzUCAAAAC2FsbG9jYXRpb25zAwMJAQAAAAIhPQAAAAIFAAAAAnIxBQAAAAJsMwkBAAAAAiE9AAAAAgkAAGgAAAACBQAAAAJyMQAAAAAAAAAAAgUAAAACbDMHCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAMldyb25nIHBheW1lbnQuIFlvdSBjYW4gYnV5IDEgb3IgMiBhbGxvY2F0aW9ucyBmb3IgCQABpAAAAAEFAAAAAnIxBQAAAAJtNgIAAAAPIHBlciBhbGxvY2F0aW9uBAAAAAJyMgkAAGkAAAACBQAAAAJsMwUAAAACcjEEAAAAAnEyAwkAAAAAAAACBQAAAAJtNAUAAAACZzMJAAP8AAAABAUAAAACZzICAAAADGxvY2tOZXV0cmlubwUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAJsNAUAAAACbDMFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAACcTIFAAAAAnEyBAAAAAJxMwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACaTcFAAAAAmY0CQAAZAAAAAIFAAAAAnE4BQAAAAJyMgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACaTcFAAAAAmYzCQAAZAAAAAIFAAAAAnE2BQAAAAJsMwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJkMQkAAGQAAAACBQAAAAJxNwUAAAACbDMFAAAAA25pbAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACaTcFAAAAAmM3CQAETgAAAAIFAAAAAnEzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmk3BQAAAAJjNwUAAAACbTEFAAAAA25pbAUAAAACcTMJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAGWNvbW1pdEhpZ2hDb21wZXRpdGlvblNhbGUAAAACAAAAAmk3AAAAAm0xBAAAAAJyMwkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAAAmwzCAUAAAACcjMAAAACXzEEAAAAAmw0CAUAAAACcjMAAAACXzIEAAAAAnI0CQEAAAACaTUAAAABCQEAAAAFdmFsdWUAAAABCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACZDkEAAAAAm00CAUAAAACcjQAAAACXzEEAAAAAm01CAUAAAACcjQAAAACXzIEAAAAAm02CAUAAAACcjQAAAACXzMEAAAAAm03CAUAAAACcjQAAAACXzQEAAAAAmoyCQEAAAAFdmFsdWUAAAABCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYjIEAAAAAmozCQEAAAAFdmFsdWUAAAABCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYzkEAAAAAnI1CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmk3BQAAAAJmMQAAAAAAAAAAAAQAAAACcjYJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJlMwcDCQEAAAABIQAAAAEFAAAAAmc2CQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQEAAAACIT0AAAACBQAAAAJnNwUAAAACaTcJAAACAAAAAQIAAAA3VGhlcmUgaXMgbm8gYWN0aXZlIGxhdW5jaHBhZCBvciB0aGlzIGxhdW5jaHBhZCBpcyBlbmRlZAMJAQAAAAEhAAAAAQUAAAACcjYJAAACAAAAAQIAAAA0VGhlcmUgaXMgbm8gaGlnaCBjb21wZXRpdGlvbiBzYWxlIGZvciB0aGlzIGxhdW5jaHBhZAMJAABmAAAAAgUAAAACajIFAAAABmhlaWdodAkAAAIAAAABAgAAAB5MYXVuY2hwYWQgc2FsZSBub3Qgc3RhcnRlZCB5ZXQDCQAAZgAAAAIFAAAABmhlaWdodAkAAGQAAAACBQAAAAJqMgUAAAACajMJAAACAAAAAQIAAAAUTGF1bmNocGFkIHNhbGUgZW5kZWQDAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQYJAQAAAAIhPQAAAAIFAAAAAmw0BQAAAAJtNAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAYT25lIGF0dGFjaGVkIHBheW1lbnQgaW4gBQAAAAJtNgIAAAAJIGV4cGVjdGVkBAAAAAJuNAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJiOQQAAAACajYJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYjgEAAAAAnI3CQEAAAACaTUAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmI1BAAAAAJuNggFAAAAAnI3AAAAAl8xBAAAAAJuNwgFAAAAAnI3AAAAAl8yBAAAAAJuOAgFAAAAAnI3AAAAAl8zBAAAAAJuOQgFAAAAAnI3AAAAAl80BAAAAAJvMQkAAGsAAAADBQAAAAJqNgUAAAACbjQJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAACbjkAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAAAm8yCQAAawAAAAMFAAAAAm8xCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmUyAAAAAAAAAABkBAAAAAJvMwkAAGkAAAACBQAAAAJsMwkAAGQAAAACBQAAAAJvMQUAAAACbzIEAAAAAnI4CQAAaAAAAAIFAAAAAm8zCQAAZAAAAAIFAAAAAm8xBQAAAAJvMgQAAAACbzYJAABlAAAAAgUAAAACbDMFAAAAAnI4AwkAAAAAAAACBQAAAAJvMwAAAAAAAAAAAAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAMTm90IGVub3VnaHQgBQAAAAJtNgIAAAAPIHRvIGJ1eSB0aWNrZXRzAwkBAAAAAiE9AAAAAgUAAAACbzYAAAAAAAAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABZXcm9uZyBwYXltZW50LiBUbyBidXkgCQABpAAAAAEFAAAAAm8zAgAAABh0aWNrZXRzIHlvdSBuZWVkIHRvIHBheSAJAAGkAAAAAQUAAAACcjgFAAAAAm02BAAAAAJwNwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJpNwUAAAACZTkCAAAAAAQAAAACcDgJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACZTQEAAAAAnA5CQABLAAAAAIJAAEsAAAAAgkAAaQAAAABCQAAZAAAAAIFAAAAAnA4AAAAAAAAAAABAgAAAAEtCQABpAAAAAEJAABkAAAAAgUAAAACcDgFAAAAAm8zBAAAAAJxMQkAASwAAAACBQAAAAJwNwMJAQAAAAIhPQAAAAIFAAAAAnA3AgAAAAAJAAEsAAAAAgIAAAABLAUAAAACcDkJAAEsAAAAAgIAAAAABQAAAAJwOQQAAAACcTIDCQAAAAAAAAIFAAAAAm00BQAAAAJnMwkAA/wAAAAEBQAAAAJnMgIAAAAMbG9ja05ldXRyaW5vBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAAAmw0BQAAAAJsMwUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAJxMgUAAAACcTIEAAAAAnEzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJpNwUAAAACZjEJAABkAAAAAgUAAAACcjUFAAAAAm8zCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmU0CQAAZAAAAAIFAAAAAnA4BQAAAAJvMwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJpNwUAAAACZTkFAAAAAnExBQAAAANuaWwDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmk3BQAAAAJjNwkABE4AAAACBQAAAAJxMwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJpNwUAAAACYzcFAAAAAm0xBQAAAANuaWwFAAAAAnEzCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAhmaW5hbGlzZQAAAAMAAAACaTcAAAACcjkAAAACczEEAAAAAnMyCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmM4BAAAAAJzMwkAAlgAAAABCQAB9wAAAAEJAADLAAAAAgkAAZoAAAABBQAAAAJyOQkAAZsAAAABBQAAAAJzMQMJAQAAAAEhAAAAAQUAAAACZzYJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAACaDQJAARMAAAAAgUAAAACaDUJAARMAAAAAgUAAAACaDYFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAQAAAAIhPQAAAAIFAAAAAnMzBQAAAAJzMgkAAAIAAAABAgAAABx2cmYgSGVpZ2h0IGhhc2ggbm90IG1hdGNoaW5nBAAAAAJzNAkBAAAAAmk1AAAAAQkBAAAABXZhbHVlAAAAAQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmQ5BAAAAAJtNAgFAAAAAnM0AAAAAl8xBAAAAAJtNQgFAAAAAnM0AAAAAl8yBAAAAAJtNggFAAAAAnM0AAAAAl8zBAAAAAJtNwgFAAAAAnM0AAAAAl80BAAAAAJqMQkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJhOQQAAAACajUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYjQEAAAAAnM1CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmUyBAAAAAJzNgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmQzAAAAAAAAAAAABAAAAAJzNwkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJiNwQAAAACczgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACZTYAAAAAAAAAAAAEAAAAAnM5CQAAawAAAAMFAAAAAnM3BQAAAAJqNQAAAAAAAAAAZAQAAAACdDEJAABrAAAAAwUAAAACczgFAAAAAnM1AAAAAAAAAABkBAAAAAJ0MgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJkMgQAAAACdDMJAABrAAAAAwUAAAACdDIFAAAAAmo1AAAAAAAAAABkBAAAAAJ0NAkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIFAAAAAnM3BQAAAAJ0MgUAAAACczkFAAAAAnQzBQAAAAJzOAUAAAACdDEDCQAAZgAAAAIFAAAAAnM2CQAAZAAAAAIFAAAAAnM3BQAAAAJ0MgkAAAIAAAABAgAAAChDYW4ndCB0cmFuc2ZlciBuZWdhdGl2ZSB2YWx1ZSB0byBwcm9qZWN0BAAAAAJxMgMJAAAAAAAAAgUAAAACbTQFAAAAAmczCQAD/AAAAAQFAAAAAmcyAgAAAA51bmxvY2tOZXV0cmlubwkABEwAAAACBQAAAAJ0NAkABEwAAAACCQACWAAAAAEFAAAAAmczBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAACcTIFAAAAAnEyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmIzBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAACajEJAABlAAAAAgkAAGQAAAACBQAAAAJzNwUAAAACdDIFAAAAAnM2BQAAAAJtNAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAJnMQkAAGQAAAACCQAAZAAAAAIFAAAAAnM5BQAAAAJ0MwUAAAACdDEFAAAAAm00BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABWNsYWltAAAAAQAAAAJpNwQAAAACdDUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACaTcFAAAAAmY1BwQAAAACdDYJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACaTcFAAAAAmU3AAAAAAAAAAAABAAAAAJxOAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJpNwUAAAACZjQAAAAAAAAAAAADCQEAAAABIQAAAAEFAAAAAmc2CQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYjMJAAACAAAAAQIAAAAxWW91IGNhbid0IGNsYWltIGJlY2F1c2UgcmVzdWx0cyBhcmUgbm90IGZpbmFsaXplZAMFAAAAAnQ1CQAAAgAAAAECAAAAF1lvdSBhcmUgYWxyZWFkeSBjbGFpbWVkAwMJAAAAAAAAAgUAAAACdDYAAAAAAAAAAAAJAAAAAAAAAgUAAAACcTgAAAAAAAAAAAAHCQAAAgAAAAECAAAALllvdSBjYW4ndCBjbGFpbSBiZWNhdXNlIHlvdSBkb24ndCBidXkgYW55dGhpbmcEAAAAAnQ3CQEAAAACaTUAAAABCQEAAAAFdmFsdWUAAAABCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACZDkEAAAAAm00CAUAAAACdDcAAAACXzEEAAAAAm01CAUAAAACdDcAAAACXzIEAAAAAm02CAUAAAACdDcAAAACXzMEAAAAAm03CAUAAAACdDcAAAACXzQEAAAAAnQ4CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmk3BQAAAAJmNgAAAAAAAAAAAAQAAAACdDkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACaTcFAAAAAmYyAAAAAAAAAAAABAAAAAJqNQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJiNAQAAAACdTEJAAGXAAAAAQkABEwAAAACBQAAAAJxOAkABEwAAAACBQAAAAJ0OQUAAAADbmlsBAAAAAJuNAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJiOQQAAAACajYJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYjgEAAAAAnUyCQEAAAACaTUAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmI1BAAAAAJuNggFAAAAAnUyAAAAAl8xBAAAAAJuNwgFAAAAAnUyAAAAAl8yBAAAAAJuOAgFAAAAAnUyAAAAAl8zBAAAAAJuOQgFAAAAAnUyAAAAAl80BAAAAAJvMQkAAGsAAAADBQAAAAJqNgUAAAACbjQJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAACbjkAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAAAmsxCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmM0BAAAAAJ1MwkAAGQAAAACCQAAaAAAAAIFAAAAAnQ4BQAAAAJqNgkAAGgAAAACBQAAAAJ1MQUAAAACazEEAAAAAnU0CQAAaAAAAAIJAABlAAAAAgUAAAACcTgFAAAAAnUxBQAAAAJrMQQAAAACdTUJAABrAAAAAwkAAGsAAAADBQAAAAJ1NAUAAAACbjQJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAACbjkAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04JAABkAAAAAgAAAAAAAAAAZAUAAAACajUAAAAAAAAAAGQEAAAAAnU2CQAAawAAAAMJAABoAAAAAgkAAGUAAAACBQAAAAJ0NgUAAAACdDgFAAAAAm8xCQAAZAAAAAIAAAAAAAAAAGQFAAAAAmo1AAAAAAAAAABkAwMJAABmAAAAAgAAAAAAAAAAAAUAAAACdTUGCQAAZgAAAAIAAAAAAAAAAAAFAAAAAnU2CQAAAgAAAAECAAAAUkVycm9yIHdpdGggYWxsb3dlZCBhbGxvY2F0aW9uIHBhcmFtIG9yIHdvbm5lZCB0aWNrZXRzIHBhcmFtIHBsZWFzZSBjb250YWN0IHN1cHBvcnQEAAAAAnU3CQAAZAAAAAIFAAAAAnU2BQAAAAJ1NgQAAAACdTgDCQAAZgAAAAIFAAAAAnU3AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAACdTcFAAAAAm00BQAAAANuaWwFAAAAA25pbAQAAAACdTkDCQAAZgAAAAIFAAAAAnUzAAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAACdTMFAAAAAm42BQAAAANuaWwFAAAAA25pbAQAAAACcTIDAwkAAGYAAAACBQAAAAJ1NwAAAAAAAAAAAAkAAAAAAAACBQAAAAJtNAUAAAACZzMHCQAD/AAAAAQFAAAAAmcyAgAAAA51bmxvY2tOZXV0cmlubwkABEwAAAACBQAAAAJ1NwkABEwAAAACCQACWAAAAAEFAAAAAmczBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAACcTIFAAAAAnEyCQAETgAAAAIJAAROAAAAAgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACaTcFAAAAAmY1BgUAAAADbmlsBQAAAAJ1OQUAAAACdTgJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEGNsYWltRnJlZXplVG9rZW4AAAABAAAAAmk3BAAAAAJrOAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACaTcFAAAAAmQ1BwMJAQAAAAEhAAAAAQUAAAACZzYJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJiMwkAAAIAAAABAgAAADFZb3UgY2FuJ3QgY2xhaW0gYmVjYXVzZSByZXN1bHRzIGFyZSBub3QgZmluYWxpemVkAwkBAAAAASEAAAABBQAAAAJrOAkAAAIAAAABAgAAADlUaGVyZSBhcmUgbm8gYWRkaXRpb25hbCB0b2tlbiBmcmVlemluZyBmb3IgdGhpcyBsYXVuY2hwYWQEAAAAAm42CQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACZDYEAAAAAnYxCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmk3BQAAAAJmNwAAAAAAAAAAAAQAAAACajIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJiMgAAAAAAAAAAAAQAAAACajMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmk3BQAAAAJjOQAAAAAAAAAAAAQAAAACdjIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACZDcEAAAAAnYzCQAAZAAAAAIJAABkAAAAAgUAAAACajIFAAAAAmozBQAAAAJ2MgMJAAAAAAAAAgUAAAACdjEAAAAAAAAAAAAJAAACAAAAAQIAAAA4WW91IGFyZSBhbHJlYWR5IGNsYWltZWQgeW91ciB0b2tlbnMgb3Igbm90IHBhaWQgYW55dGhpbmcDCQAAZgAAAAIFAAAAAnYzBQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACAgAAABlZb3VyIHRva2VucyBmcmVlemVkIHRlZWwgCQABpAAAAAEFAAAAAnYzCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAACdjEFAAAAAm42CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJpNwUAAAACZjcAAAAAAAAAAAAFAAAAA25pbAAAAAFpAQAAABB0cmFuc2ZlckJ1eUFzc2V0AAAAAgAAAAJpNwAAAAJ2NAMJAQAAAAEhAAAAAQUAAAACZzYJAAACAAAAAQIAAAAQREFwcCBpcyBpbmFjdGl2ZQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAACaDQJAARMAAAAAgUAAAACaDUJAARMAAAAAgUAAAACaDYFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQAAAACajEJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACYTkEAAAAAnY1CQEAAAACaTUAAAABCQEAAAAFdmFsdWUAAAABCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACZDkEAAAAAm00CAUAAAACdjUAAAACXzEEAAAAAm01CAUAAAACdjUAAAACXzIEAAAAAm02CAUAAAACdjUAAAACXzMEAAAAAm03CAUAAAACdjUAAAACXzQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAAJpNwUAAAACZDMFAAAAAnY0CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAAmoxBQAAAAJ2NAUAAAACbTQFAAAAA25pbAAAAAFpAQAAAAhzaHV0ZG93bgAAAAADCQEAAAABIQAAAAEFAAAAAmc2CQAAAgAAAAECAAAAFURBcHAgYWxyZWFkeSBpbmFjdGl2ZQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAACaDQJAARMAAAAAgUAAAACaDUJAARMAAAAAgUAAAACaDYFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAACYTEHBQAAAANuaWwAAAABaQEAAAAIYWN0aXZhdGUAAAAAAwUAAAACZzYJAAACAAAAAQIAAAATREFwcCBhbHJlYWR5IGFjdGl2ZQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAACaDQJAARMAAAAAgUAAAACaDUJAARMAAAAAgUAAAACaDYFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAACYTEGBQAAAANuaWwAAAABAAAAAnR4AQAAAAJ2NgAAAAAEAAAAAnY3BAAAAAJ2OAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAAJoNAAAAAAAAAAAAQAAAAAAAAAAAAQAAAACdjkDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQUAAAACaDUAAAAAAAAAAAEAAAAAAAAAAAAEAAAAAncxAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAIFAAAAAmg2AAAAAAAAAAABAAAAAAAAAAAACQAAZwAAAAIJAABkAAAAAgkAAGQAAAACBQAAAAJ2OAUAAAACdjkFAAAAAncxAAAAAAAAAAACBAAAAAJ3MgMDAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAAmg0BgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAAmg1BgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAAmg2BgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAAmc0BAAAAAJoMQUAAAACdHgDCQAAAQAAAAIFAAAAAmgxAgAAAA9EYXRhVHJhbnNhY3Rpb24EAAAAAnczBQAAAAJoMQMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAACZjgFAAAAAmE1BwUAAAACdzIHBQAAAAJ2N8Lrvi0=", "height": 1832587, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DpBnKrkZzLRZvrHzj181W395GwdhwFtgLGMx9USQ7ETa Next: Ee2jxru2Dv1HBbkLEU7kn6KKUVG1ktegyhjEcbgGUkHq Diff:
OldNewDifferences
2727
2828 let keyComission = "_comission"
2929
30-let keyHighCompetitionComission = "_high_competition_comission"
31-
3230 let keyAssetId = "_asset_id"
3331
3432 let keyTotalTokenAmount = "_total_token_amount"
3533
3634 let keyTotalAmountBuyAssetSold = "_total_buy_asset_sold"
37-
38-let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
3935
4036 let keyTokensPerTicket = "_tokens_per_ticket"
4137
4541
4642 let keySwopfiTicketsAmount = "_tickets_swopfi_members"
4743
48-let keyHCAmount = "_tickets_high_competition"
49-
5044 let keyCampaignTokensAmount = "_tokens_access_list"
5145
5246 let keyTokensPerAllocation = "_tokens_per_allocation"
5347
5448 let keyTicketLastNumber = "_ticket_last_number_high_competition"
55-
56-let keyHCTicketLastNumber = "_ticket_last_number"
5749
5850 let keyGovernanceStaked = "_SWOP_amount"
5951
7163
7264 let keyFreezSwopDuration = "_freeze_swop_duration"
7365
74-let keyHighCompetitionSale = "_high_competition_sale"
75-
7666 let keyFreezeAdditionalToken = "_freeze_additional_token"
7767
7868 let keyFreezeTokenId = "_freeze_token_id"
8575
8676 let keyClaimParams = "_claim_params"
8777
78+let keyHighCompetitionComission = "_high_competition_comission"
79+
80+let keyHighCompetitionSale = "_high_competition_sale"
81+
82+let keyHCTicketLastNumber = "_ticket_last_number"
83+
84+let keyHighCompetitionAmount = "_tickets_high_competition"
85+
86+let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
87+
8888 let keyUserBoughtTicketsAmount = "_bought_tickets"
89-
90-let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
9189
9290 let keyUserTickets = "_tickets_number"
9391
9492 let keyUserHCTickets = "_tickets_number_high_competition"
93+
94+let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
9595
9696 let keyUserAvailableAllocations = "_available_purchase_marketing"
9797
199199 else {
200200 let launchpadId = getLaunchpadNextId()
201201 let launchpadIdStr = toString(launchpadId)
202- let $t063356410 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
203- let pmtAmount = $t063356410._1
204- let pmtAssetId = $t063356410._2
205- let $t064196492 = getAssetInfo(pmtAssetId)
206- let pmtStrAssetId = $t064196492._1
207- let pmtAssetName = $t064196492._2
208- let pmtDecimals = $t064196492._3
202+ let $t063546429 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
203+ let pmtAmount = $t063546429._1
204+ let pmtAssetId = $t063546429._2
205+ let $t064386511 = getAssetInfo(pmtAssetId)
206+ let pmtStrAssetId = $t064386511._1
207+ let pmtAssetName = $t064386511._2
208+ let pmtDecimals = $t064386511._3
209209 let freezeAdditionalEntry = if (freezeAdditionalToken)
210210 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
211211 else nil
212- ([IntegerEntry((pmtStrAssetId + "_launchpad"), launchpadId), IntegerEntry(keyLaunchpadNextId, (launchpadId + 1)), StringEntry((launchpadIdStr + keyAddress), projectAddress), IntegerEntry((launchpadIdStr + keyInitHeight), height), IntegerEntry((launchpadIdStr + keyStartHeight), startHeight), IntegerEntry((launchpadIdStr + keyDuration), duration), StringEntry((launchpadIdStr + keyBuyToken), buyToken), IntegerEntry((launchpadIdStr + keyFreezSwopDuration), swopFreezeDuration), IntegerEntry((launchpadIdStr + keyTotalTokenAmount), pmtAmount), StringEntry((launchpadIdStr + keyAssetId), pmtStrAssetId), IntegerEntry((launchpadIdStr + keyComission), commission), IntegerEntry((launchpadIdStr + keyHighCompetitionComission), highCompetitionComission), IntegerEntry((launchpadIdStr + keyTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyTokensPerTicket), tokensPerTicket), IntegerEntry((launchpadIdStr + keyPricePerToken), pricePerToken), IntegerEntry((launchpadIdStr + keySwopPerTicket), swopPerTicket), IntegerEntry((launchpadIdStr + keySwopfiTicketsAmount), swopfiTicketsAmount), IntegerEntry((launchpadIdStr + keyCampaignTokensAmount), campaignTokensAmount), IntegerEntry((launchpadIdStr + keyHCAmount), highCompetitionTicketsAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), StringEntry((launchpadIdStr + keyClaimParams), makeString(claimParams, ",")), BooleanEntry((launchpadIdStr + keyHighCompetitionSale), HighCompetitionSale), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")] ++ freezeAdditionalEntry)
212+ ([IntegerEntry((pmtStrAssetId + "_launchpad"), launchpadId), IntegerEntry(keyLaunchpadNextId, (launchpadId + 1)), StringEntry((launchpadIdStr + keyAddress), projectAddress), IntegerEntry((launchpadIdStr + keyInitHeight), height), IntegerEntry((launchpadIdStr + keyStartHeight), startHeight), IntegerEntry((launchpadIdStr + keyDuration), duration), StringEntry((launchpadIdStr + keyBuyToken), buyToken), IntegerEntry((launchpadIdStr + keyFreezSwopDuration), swopFreezeDuration), IntegerEntry((launchpadIdStr + keyTotalTokenAmount), pmtAmount), StringEntry((launchpadIdStr + keyAssetId), pmtStrAssetId), IntegerEntry((launchpadIdStr + keyComission), commission), IntegerEntry((launchpadIdStr + keyTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyTokensPerTicket), tokensPerTicket), IntegerEntry((launchpadIdStr + keyPricePerToken), pricePerToken), IntegerEntry((launchpadIdStr + keySwopPerTicket), swopPerTicket), IntegerEntry((launchpadIdStr + keySwopfiTicketsAmount), swopfiTicketsAmount), IntegerEntry((launchpadIdStr + keyCampaignTokensAmount), campaignTokensAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), StringEntry((launchpadIdStr + keyClaimParams), makeString(claimParams, ",")), BooleanEntry((launchpadIdStr + keyHighCompetitionSale), HighCompetitionSale), IntegerEntry((launchpadIdStr + keyHighCompetitionComission), highCompetitionComission), IntegerEntry((launchpadIdStr + keyHighCompetitionAmount), highCompetitionTicketsAmount), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")] ++ freezeAdditionalEntry)
213213 }
214214
215215
216216
217217 @Callable(i)
218218 func commitSwopfiSale (launchpadId,refId) = {
219- let $t089929067 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
220- let pmtAmount = $t089929067._1
221- let pmtAssetId = $t089929067._2
222- let $t090729222 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
223- let buyAssetId = $t090729222._1
224- let buyAssetStrId = $t090729222._2
225- let buyAssetName = $t090729222._3
226- let buyAssetDecimals = $t090729222._4
219+ let $t090249099 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
220+ let pmtAmount = $t090249099._1
221+ let pmtAssetId = $t090249099._2
222+ let $t091049254 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
223+ let buyAssetId = $t091049254._1
224+ let buyAssetStrId = $t091049254._2
225+ let buyAssetName = $t091049254._3
226+ let buyAssetDecimals = $t091049254._4
227227 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
228228 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
229229 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
261261 else {
262262 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
263263 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
264- let $t01111011254 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
265- let tokenId = $t01111011254._1
266- let tokenStrAssetId = $t01111011254._2
267- let tokenAssetName = $t01111011254._3
268- let tokenDecimals = $t01111011254._4
264+ let $t01114211286 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
265+ let tokenId = $t01114211286._1
266+ let tokenStrAssetId = $t01114211286._2
267+ let tokenAssetName = $t01114211286._3
268+ let tokenDecimals = $t01114211286._4
269269 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
270270 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
271271 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
281281 then {
282282 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
283283 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
284- let $t01241812505 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
285- let pmtAmountFreeze = $t01241812505._1
286- let pmtAssetIdFreeze = $t01241812505._2
287- let $t01252212613 = getAssetInfo(pmtAssetId)
288- let pmtFreezeStrAssetId = $t01252212613._1
289- let pmtFreezeAssetName = $t01252212613._2
290- let pmtFreezeDecimals = $t01252212613._3
284+ let $t01245012537 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
285+ let pmtAmountFreeze = $t01245012537._1
286+ let pmtAssetIdFreeze = $t01245012537._2
287+ let $t01255412645 = getAssetInfo(pmtAssetId)
288+ let pmtFreezeStrAssetId = $t01255412645._1
289+ let pmtFreezeAssetName = $t01255412645._2
290+ let pmtFreezeDecimals = $t01255412645._3
291291 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
292292 if (if ((pmtFreezeStrAssetId != freezeTokenId))
293293 then true
321321
322322 @Callable(i)
323323 func commitAccessListSale (launchpadId,refId) = {
324- let $t01466014735 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
325- let pmtAmount = $t01466014735._1
326- let pmtAssetId = $t01466014735._2
327- let $t01474014890 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
328- let buyAssetId = $t01474014890._1
329- let buyAssetStrId = $t01474014890._2
330- let buyAssetName = $t01474014890._3
331- let buyAssetDecimals = $t01474014890._4
324+ let $t01469214767 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
325+ let pmtAmount = $t01469214767._1
326+ let pmtAssetId = $t01469214767._2
327+ let $t01477214922 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
328+ let buyAssetId = $t01477214922._1
329+ let buyAssetStrId = $t01477214922._2
330+ let buyAssetName = $t01477214922._3
331+ let buyAssetDecimals = $t01477214922._4
332332 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
333333 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
334334 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
335335 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
336336 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
337337 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
338- let $t01555915703 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
339- let tokenId = $t01555915703._1
340- let tokenStrAssetId = $t01555915703._2
341- let tokenAssetName = $t01555915703._3
342- let tokenDecimals = $t01555915703._4
338+ let $t01559115735 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
339+ let tokenId = $t01559115735._1
340+ let tokenStrAssetId = $t01559115735._2
341+ let tokenAssetName = $t01559115735._3
342+ let tokenDecimals = $t01559115735._4
343343 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
344344 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
345345 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
381381
382382 @Callable(i)
383383 func commitHighCompetitionSale (launchpadId,refId) = {
384- let $t01801218087 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
385- let pmtAmount = $t01801218087._1
386- let pmtAssetId = $t01801218087._2
387- let $t01809218242 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
388- let buyAssetId = $t01809218242._1
389- let buyAssetStrId = $t01809218242._2
390- let buyAssetName = $t01809218242._3
391- let buyAssetDecimals = $t01809218242._4
384+ let $t01804418119 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
385+ let pmtAmount = $t01804418119._1
386+ let pmtAssetId = $t01804418119._2
387+ let $t01812418274 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
388+ let buyAssetId = $t01812418274._1
389+ let buyAssetStrId = $t01812418274._2
390+ let buyAssetName = $t01812418274._3
391+ let buyAssetDecimals = $t01812418274._4
392392 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
393393 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
394394 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
410410 else {
411411 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
412412 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
413- let $t01949119635 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
414- let tokenId = $t01949119635._1
415- let tokenStrAssetId = $t01949119635._2
416- let tokenAssetName = $t01949119635._3
417- let tokenDecimals = $t01949119635._4
413+ let $t01952319667 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
414+ let tokenId = $t01952319667._1
415+ let tokenStrAssetId = $t01952319667._2
416+ let tokenAssetName = $t01952319667._3
417+ let tokenDecimals = $t01952319667._4
418418 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
419419 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
420420 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
459459 else if ((calcHash != savedHash))
460460 then throw("vrf Height hash not matching")
461461 else {
462- let $t02242022570 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
463- let buyAssetId = $t02242022570._1
464- let buyAssetStrId = $t02242022570._2
465- let buyAssetName = $t02242022570._3
466- let buyAssetDecimals = $t02242022570._4
462+ let $t02245222602 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
463+ let buyAssetId = $t02245222602._1
464+ let buyAssetStrId = $t02245222602._2
465+ let buyAssetName = $t02245222602._3
466+ let buyAssetDecimals = $t02245222602._4
467467 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
468468 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
469469 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
506506 else false)
507507 then throw("You can't claim because you don't buy anything")
508508 else {
509- let $t02542925579 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
510- let buyAssetId = $t02542925579._1
511- let buyAssetStrId = $t02542925579._2
512- let buyAssetName = $t02542925579._3
513- let buyAssetDecimals = $t02542925579._4
509+ let $t02546125611 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
510+ let buyAssetId = $t02546125611._1
511+ let buyAssetStrId = $t02546125611._2
512+ let buyAssetName = $t02546125611._3
513+ let buyAssetDecimals = $t02546125611._4
514514 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
515515 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
516516 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
517517 let allowedAllocations = min([boughtAllocations, awailableAllocations])
518518 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
519519 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
520- let $t02622626370 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521- let tokenId = $t02622626370._1
522- let tokenStrAssetId = $t02622626370._2
523- let tokenAssetName = $t02622626370._3
524- let tokenDecimals = $t02622626370._4
520+ let $t02625826402 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521+ let tokenId = $t02625826402._1
522+ let tokenStrAssetId = $t02625826402._2
523+ let tokenAssetName = $t02625826402._3
524+ let tokenDecimals = $t02625826402._4
525525 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
526526 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
527527 let transferTokensAmount = ((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation))
587587 then throw("Only admin can call this function")
588588 else {
589589 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
590- let $t03004230192 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
591- let buyAssetId = $t03004230192._1
592- let buyAssetStrId = $t03004230192._2
593- let buyAssetName = $t03004230192._3
594- let buyAssetDecimals = $t03004230192._4
590+ let $t03007430224 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
591+ let buyAssetId = $t03007430224._1
592+ let buyAssetStrId = $t03007430224._2
593+ let buyAssetName = $t03007430224._3
594+ let buyAssetDecimals = $t03007430224._4
595595 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
596596 }
597597
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyActive = "active"
55
66 let keyAdminPubKey1 = "admin_pub_1"
77
88 let keyAdminPubKey2 = "admin_pub_2"
99
1010 let keyAdminPubKey3 = "admin_pub_3"
1111
1212 let keyLaunchpadDataTransactionStatus = "launchpad_data_transaction_status"
1313
1414 let keyLaunchpadNextId = "launchpad_next_id"
1515
1616 let keyLaunchpadActiveId = "launchpad_active_id"
1717
1818 let keyInitCaller = "init_caller"
1919
2020 let keyAddress = "_address"
2121
2222 let keyInitHeight = "_init_height"
2323
2424 let keyStartHeight = "_start_height"
2525
2626 let keyFinaliseHeight = "_finalise_height"
2727
2828 let keyComission = "_comission"
2929
30-let keyHighCompetitionComission = "_high_competition_comission"
31-
3230 let keyAssetId = "_asset_id"
3331
3432 let keyTotalTokenAmount = "_total_token_amount"
3533
3634 let keyTotalAmountBuyAssetSold = "_total_buy_asset_sold"
37-
38-let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
3935
4036 let keyTokensPerTicket = "_tokens_per_ticket"
4137
4238 let keyPricePerToken = "_price_per_token"
4339
4440 let keySwopPerTicket = "_swop_per_ticket"
4541
4642 let keySwopfiTicketsAmount = "_tickets_swopfi_members"
4743
48-let keyHCAmount = "_tickets_high_competition"
49-
5044 let keyCampaignTokensAmount = "_tokens_access_list"
5145
5246 let keyTokensPerAllocation = "_tokens_per_allocation"
5347
5448 let keyTicketLastNumber = "_ticket_last_number_high_competition"
55-
56-let keyHCTicketLastNumber = "_ticket_last_number"
5749
5850 let keyGovernanceStaked = "_SWOP_amount"
5951
6052 let keyUserRefId = "_ref_id"
6153
6254 let keyVerifyHash = "_verify_hash"
6355
6456 let keyDuration = "_duration"
6557
6658 let keyAmountBuyAssetInMarketing = "_total_purchased_buy_asset_in_marketing"
6759
6860 let keyAmountBuyAssetInMarketingFinalized = "_total_purchased_buy_asset_in_marketing_finalized"
6961
7062 let keyTransferBuyAsset = "_transfer_buy_asset"
7163
7264 let keyFreezSwopDuration = "_freeze_swop_duration"
7365
74-let keyHighCompetitionSale = "_high_competition_sale"
75-
7666 let keyFreezeAdditionalToken = "_freeze_additional_token"
7767
7868 let keyFreezeTokenId = "_freeze_token_id"
7969
8070 let keyFreezeTokenDuration = "_freeze_token_duration"
8171
8272 let keyFreezeTokenPerTicket = "_freeze_token_per_ticket"
8373
8474 let keyBuyToken = "_buy_token"
8575
8676 let keyClaimParams = "_claim_params"
8777
78+let keyHighCompetitionComission = "_high_competition_comission"
79+
80+let keyHighCompetitionSale = "_high_competition_sale"
81+
82+let keyHCTicketLastNumber = "_ticket_last_number"
83+
84+let keyHighCompetitionAmount = "_tickets_high_competition"
85+
86+let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
87+
8888 let keyUserBoughtTicketsAmount = "_bought_tickets"
89-
90-let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
9189
9290 let keyUserTickets = "_tickets_number"
9391
9492 let keyUserHCTickets = "_tickets_number_high_competition"
93+
94+let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
9595
9696 let keyUserAvailableAllocations = "_available_purchase_marketing"
9797
9898 let keyUserAmountBuyAssetInMarketing = "_purchased_buy_asset_in_marketing"
9999
100100 let keyUserBoughtAllocations = "_bought_allocations"
101101
102102 let keyUserClaimStatus = "_claim_status"
103103
104104 let keyUserWinnedTicketsAmount = "_tickets_result"
105105
106106 let keyUserFreezeToken = "_freeze_token_amount"
107107
108108 let oracle = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
109109
110110 let governance = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
111111
112112 let commissionWallet = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
113113
114114 let stakingUSDNAddress = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
115115
116116 let USDN = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
117117
118118 let adminPubKeyStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
119119
120120 let maxAllocationsAmount = 2
121121
122122 let isActive = valueOrElse(getBoolean(this, keyActive), true)
123123
124124 let activeLaunchpadId = valueOrElse(getIntegerValue(this, keyLaunchpadActiveId), -1)
125125
126126 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
127127 case string: String =>
128128 fromBase58String(string)
129129 case nothing =>
130130 throw("Admin public key is empty")
131131 }
132132
133133
134134 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
135135
136136 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
137137
138138 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
139139
140140 func getAssetInfo (assetId) = match assetId {
141141 case id: ByteVector =>
142142 let stringId = toBase58String(id)
143143 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
144144 $Tuple3(stringId, info.name, info.decimals)
145145 case waves: Unit =>
146146 $Tuple3("WAVES", "WAVES", 8)
147147 case _ =>
148148 throw("Match error")
149149 }
150150
151151
152152 func getLaunchpadNextId () = valueOrElse(getInteger(this, keyLaunchpadNextId), 1)
153153
154154
155155 func stakedUsdnAmount () = valueOrElse(getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(USDN)) + "_") + toString(this))), 0)
156156
157157
158158 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
159159 then $Tuple4(unit, "WAVES", "WAVES", 8)
160160 else {
161161 let stringId = assetStr
162162 let id = fromBase58String(assetStr)
163163 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
164164 $Tuple4(id, stringId, info.name, info.decimals)
165165 }
166166
167167
168168 @Callable(i)
169169 func hashingRandom (launchpadId,hash) = if (!(isActive))
170170 then throw("DApp is inactive at this moment")
171171 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
172172 then throw("Only admin can call this function")
173173 else [StringEntry((toString(launchpadId) + keyVerifyHash), hash)]
174174
175175
176176
177177 @Callable(i)
178178 func initCaller (address) = if (!(isActive))
179179 then throw("DApp is inactive at this moment")
180180 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
181181 then throw("Only admin can call this function")
182182 else [StringEntry(keyInitCaller, address)]
183183
184184
185185
186186 @Callable(i)
187187 func init (projectAddress,startHeight,duration,buyToken,commission,tokensPerTicket,pricePerToken,swopfiTicketsAmount,campaignTokensAmount,tokensPerAllocation,swopPerTicket,swopFreezeDuration,claimParams,HighCompetitionSale,highCompetitionComission,highCompetitionTicketsAmount,freezeAdditionalToken,freezeParams) = if (!(isActive))
188188 then throw("DApp is inactive at this moment")
189189 else if ((toString(i.caller) != valueOrElse(getString(this, keyInitCaller), "")))
190190 then throw("Only project admin can call init function")
191191 else if ((size(i.payments) != 1))
192192 then throw("One attached payment expected")
193193 else if ((height > startHeight))
194194 then throw("Start height must be greater than blockchain height")
195195 else if (if (freezeAdditionalToken)
196196 then (size(freezeParams) != 3)
197197 else false)
198198 then throw("Freeze params list must have 3 items")
199199 else {
200200 let launchpadId = getLaunchpadNextId()
201201 let launchpadIdStr = toString(launchpadId)
202- let $t063356410 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
203- let pmtAmount = $t063356410._1
204- let pmtAssetId = $t063356410._2
205- let $t064196492 = getAssetInfo(pmtAssetId)
206- let pmtStrAssetId = $t064196492._1
207- let pmtAssetName = $t064196492._2
208- let pmtDecimals = $t064196492._3
202+ let $t063546429 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
203+ let pmtAmount = $t063546429._1
204+ let pmtAssetId = $t063546429._2
205+ let $t064386511 = getAssetInfo(pmtAssetId)
206+ let pmtStrAssetId = $t064386511._1
207+ let pmtAssetName = $t064386511._2
208+ let pmtDecimals = $t064386511._3
209209 let freezeAdditionalEntry = if (freezeAdditionalToken)
210210 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
211211 else nil
212- ([IntegerEntry((pmtStrAssetId + "_launchpad"), launchpadId), IntegerEntry(keyLaunchpadNextId, (launchpadId + 1)), StringEntry((launchpadIdStr + keyAddress), projectAddress), IntegerEntry((launchpadIdStr + keyInitHeight), height), IntegerEntry((launchpadIdStr + keyStartHeight), startHeight), IntegerEntry((launchpadIdStr + keyDuration), duration), StringEntry((launchpadIdStr + keyBuyToken), buyToken), IntegerEntry((launchpadIdStr + keyFreezSwopDuration), swopFreezeDuration), IntegerEntry((launchpadIdStr + keyTotalTokenAmount), pmtAmount), StringEntry((launchpadIdStr + keyAssetId), pmtStrAssetId), IntegerEntry((launchpadIdStr + keyComission), commission), IntegerEntry((launchpadIdStr + keyHighCompetitionComission), highCompetitionComission), IntegerEntry((launchpadIdStr + keyTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyTokensPerTicket), tokensPerTicket), IntegerEntry((launchpadIdStr + keyPricePerToken), pricePerToken), IntegerEntry((launchpadIdStr + keySwopPerTicket), swopPerTicket), IntegerEntry((launchpadIdStr + keySwopfiTicketsAmount), swopfiTicketsAmount), IntegerEntry((launchpadIdStr + keyCampaignTokensAmount), campaignTokensAmount), IntegerEntry((launchpadIdStr + keyHCAmount), highCompetitionTicketsAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), StringEntry((launchpadIdStr + keyClaimParams), makeString(claimParams, ",")), BooleanEntry((launchpadIdStr + keyHighCompetitionSale), HighCompetitionSale), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")] ++ freezeAdditionalEntry)
212+ ([IntegerEntry((pmtStrAssetId + "_launchpad"), launchpadId), IntegerEntry(keyLaunchpadNextId, (launchpadId + 1)), StringEntry((launchpadIdStr + keyAddress), projectAddress), IntegerEntry((launchpadIdStr + keyInitHeight), height), IntegerEntry((launchpadIdStr + keyStartHeight), startHeight), IntegerEntry((launchpadIdStr + keyDuration), duration), StringEntry((launchpadIdStr + keyBuyToken), buyToken), IntegerEntry((launchpadIdStr + keyFreezSwopDuration), swopFreezeDuration), IntegerEntry((launchpadIdStr + keyTotalTokenAmount), pmtAmount), StringEntry((launchpadIdStr + keyAssetId), pmtStrAssetId), IntegerEntry((launchpadIdStr + keyComission), commission), IntegerEntry((launchpadIdStr + keyTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyTokensPerTicket), tokensPerTicket), IntegerEntry((launchpadIdStr + keyPricePerToken), pricePerToken), IntegerEntry((launchpadIdStr + keySwopPerTicket), swopPerTicket), IntegerEntry((launchpadIdStr + keySwopfiTicketsAmount), swopfiTicketsAmount), IntegerEntry((launchpadIdStr + keyCampaignTokensAmount), campaignTokensAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), StringEntry((launchpadIdStr + keyClaimParams), makeString(claimParams, ",")), BooleanEntry((launchpadIdStr + keyHighCompetitionSale), HighCompetitionSale), IntegerEntry((launchpadIdStr + keyHighCompetitionComission), highCompetitionComission), IntegerEntry((launchpadIdStr + keyHighCompetitionAmount), highCompetitionTicketsAmount), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")] ++ freezeAdditionalEntry)
213213 }
214214
215215
216216
217217 @Callable(i)
218218 func commitSwopfiSale (launchpadId,refId) = {
219- let $t089929067 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
220- let pmtAmount = $t089929067._1
221- let pmtAssetId = $t089929067._2
222- let $t090729222 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
223- let buyAssetId = $t090729222._1
224- let buyAssetStrId = $t090729222._2
225- let buyAssetName = $t090729222._3
226- let buyAssetDecimals = $t090729222._4
219+ let $t090249099 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
220+ let pmtAmount = $t090249099._1
221+ let pmtAssetId = $t090249099._2
222+ let $t091049254 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
223+ let buyAssetId = $t091049254._1
224+ let buyAssetStrId = $t091049254._2
225+ let buyAssetName = $t091049254._3
226+ let buyAssetDecimals = $t091049254._4
227227 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
228228 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
229229 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
230230 let allowedTicketsAmount = (allowedTicketsAmountAll - boughtTicketsAmount)
231231 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
232232 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
233233 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
234234 if (!(isActive))
235235 then throw("DApp is inactive at this moment")
236236 else if ((activeLaunchpadId != launchpadId))
237237 then throw("There is no active launchpad or this launchpad is ended")
238238 else if ((startHeight > height))
239239 then throw("Launchpad sale not started yet")
240240 else if ((height > (startHeight + duration)))
241241 then throw("Launchpad sale ended")
242242 else if (if (!(freezeAdditionalToken))
243243 then if ((size(i.payments) != 1))
244244 then true
245245 else (pmtAssetId != buyAssetId)
246246 else false)
247247 then throw((("One attached payment in " + buyAssetName) + " expected"))
248248 else if (if (freezeAdditionalToken)
249249 then if ((size(i.payments) != 2))
250250 then true
251251 else (pmtAssetId != buyAssetId)
252252 else false)
253253 then {
254254 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
255255 throw(((("Two attached payments expected: First in " + buyAssetName) + ", second in ") + freezeTokenId))
256256 }
257257 else if (if ((0 >= allowedTicketsAmountAll))
258258 then true
259259 else (0 >= allowedTicketsAmount))
260260 then throw("Not enought SWOP in staking to buy tickets")
261261 else {
262262 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
263263 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
264- let $t01111011254 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
265- let tokenId = $t01111011254._1
266- let tokenStrAssetId = $t01111011254._2
267- let tokenAssetName = $t01111011254._3
268- let tokenDecimals = $t01111011254._4
264+ let $t01114211286 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
265+ let tokenId = $t01114211286._1
266+ let tokenStrAssetId = $t01114211286._2
267+ let tokenAssetName = $t01114211286._3
268+ let tokenDecimals = $t01114211286._4
269269 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
270270 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
271271 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
272272 let allowedBuyTicketAmount = min([buyTicketAmount, allowedTicketsAmount])
273273 let allowedBuyPriceWithComission = (allowedBuyTicketAmount * (ticketPrice + commissionPerTicket))
274274 let change = (pmtAmount - allowedBuyPriceWithComission)
275275 if ((buyTicketAmount == 0))
276276 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
277277 else if ((change != 0))
278278 then throw((((("Wrong payment. To buy " + toString(allowedBuyTicketAmount)) + "tickets you need to pay ") + toString(allowedBuyPriceWithComission)) + buyAssetName))
279279 else {
280280 let freezeAdditionalEntry = if (freezeAdditionalToken)
281281 then {
282282 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
283283 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
284- let $t01241812505 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
285- let pmtAmountFreeze = $t01241812505._1
286- let pmtAssetIdFreeze = $t01241812505._2
287- let $t01252212613 = getAssetInfo(pmtAssetId)
288- let pmtFreezeStrAssetId = $t01252212613._1
289- let pmtFreezeAssetName = $t01252212613._2
290- let pmtFreezeDecimals = $t01252212613._3
284+ let $t01245012537 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
285+ let pmtAmountFreeze = $t01245012537._1
286+ let pmtAssetIdFreeze = $t01245012537._2
287+ let $t01255412645 = getAssetInfo(pmtAssetId)
288+ let pmtFreezeStrAssetId = $t01255412645._1
289+ let pmtFreezeAssetName = $t01255412645._2
290+ let pmtFreezeDecimals = $t01255412645._3
291291 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
292292 if (if ((pmtFreezeStrAssetId != freezeTokenId))
293293 then true
294294 else (needFreezeTokens != pmtAmountFreeze))
295295 then throw((((("You need to add " + toString(needFreezeTokens)) + " ") + pmtFreezeAssetName) + " as a second payment"))
296296 else [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), pmtAmountFreeze)]
297297 }
298298 else nil
299299 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets)), "")
300300 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyTicketLastNumber))
301301 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + allowedBuyTicketAmount)))
302302 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
303303 then ("," + boughtRange)
304304 else ("" + boughtRange)))
305305 let inv = if ((buyAssetId == USDN))
306306 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
307307 else 0
308308 if ((inv == inv))
309309 then {
310310 let baseEntry = ([IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount), (boughtTicketsAmount + allowedBuyTicketAmount)), IntegerEntry((toString(launchpadId) + keyTicketLastNumber), (lastBoughtTicketNumber + allowedBuyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets), newUserBoughtTicketsNumbers)] ++ freezeAdditionalEntry)
311311 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
312312 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
313313 else baseEntry
314314 }
315315 else throw("Strict value is not equal to itself.")
316316 }
317317 }
318318 }
319319
320320
321321
322322 @Callable(i)
323323 func commitAccessListSale (launchpadId,refId) = {
324- let $t01466014735 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
325- let pmtAmount = $t01466014735._1
326- let pmtAssetId = $t01466014735._2
327- let $t01474014890 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
328- let buyAssetId = $t01474014890._1
329- let buyAssetStrId = $t01474014890._2
330- let buyAssetName = $t01474014890._3
331- let buyAssetDecimals = $t01474014890._4
324+ let $t01469214767 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
325+ let pmtAmount = $t01469214767._1
326+ let pmtAssetId = $t01469214767._2
327+ let $t01477214922 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
328+ let buyAssetId = $t01477214922._1
329+ let buyAssetStrId = $t01477214922._2
330+ let buyAssetName = $t01477214922._3
331+ let buyAssetDecimals = $t01477214922._4
332332 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
333333 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
334334 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
335335 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
336336 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
337337 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
338- let $t01555915703 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
339- let tokenId = $t01555915703._1
340- let tokenStrAssetId = $t01555915703._2
341- let tokenAssetName = $t01555915703._3
342- let tokenDecimals = $t01555915703._4
338+ let $t01559115735 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
339+ let tokenId = $t01559115735._1
340+ let tokenStrAssetId = $t01559115735._2
341+ let tokenAssetName = $t01559115735._3
342+ let tokenDecimals = $t01559115735._4
343343 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
344344 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
345345 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
346346 if (!(isActive))
347347 then throw("DApp is inactive at this moment")
348348 else if ((activeLaunchpadId != launchpadId))
349349 then throw("There is no active launchpad or this launchpad is ended")
350350 else if ((startHeight > height))
351351 then throw("Launchpad sale not started yet")
352352 else if ((height > (startHeight + duration)))
353353 then throw("Launchpad sale ended")
354354 else if (if ((size(i.payments) != 1))
355355 then true
356356 else (pmtAssetId != buyAssetId))
357357 then throw((("One attached payment in " + buyAssetName) + " expected"))
358358 else if ((boughtAllocations >= maxAllocationsAmount))
359359 then throw((("You can buy only " + toString(maxAllocationsAmount)) + "allocations"))
360360 else if (if ((allocationPriceWithComission != pmtAmount))
361361 then ((allocationPriceWithComission * 2) != pmtAmount)
362362 else false)
363363 then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(allocationPriceWithComission)) + buyAssetName) + " per allocation"))
364364 else {
365365 let buyAllocationsAmount = (pmtAmount / allocationPriceWithComission)
366366 let inv = if ((buyAssetId == USDN))
367367 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
368368 else 0
369369 if ((inv == inv))
370370 then {
371371 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations), (boughtAllocations + buyAllocationsAmount)), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing), (userUsdnInMarketing + pmtAmount)), IntegerEntry((toString(launchpadId) + keyAmountBuyAssetInMarketing), (usdnInMarketing + pmtAmount))]
372372 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
373373 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
374374 else baseEntry
375375 }
376376 else throw("Strict value is not equal to itself.")
377377 }
378378 }
379379
380380
381381
382382 @Callable(i)
383383 func commitHighCompetitionSale (launchpadId,refId) = {
384- let $t01801218087 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
385- let pmtAmount = $t01801218087._1
386- let pmtAssetId = $t01801218087._2
387- let $t01809218242 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
388- let buyAssetId = $t01809218242._1
389- let buyAssetStrId = $t01809218242._2
390- let buyAssetName = $t01809218242._3
391- let buyAssetDecimals = $t01809218242._4
384+ let $t01804418119 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
385+ let pmtAmount = $t01804418119._1
386+ let pmtAssetId = $t01804418119._2
387+ let $t01812418274 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
388+ let buyAssetId = $t01812418274._1
389+ let buyAssetStrId = $t01812418274._2
390+ let buyAssetName = $t01812418274._3
391+ let buyAssetDecimals = $t01812418274._4
392392 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
393393 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
394394 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
395395 let highCompetitionSale = valueOrElse(getBoolean(this, (toString(launchpadId) + keyHighCompetitionSale)), false)
396396 if (!(isActive))
397397 then throw("DApp is inactive at this moment")
398398 else if ((activeLaunchpadId != launchpadId))
399399 then throw("There is no active launchpad or this launchpad is ended")
400400 else if (!(highCompetitionSale))
401401 then throw("There is no high competition sale for this launchpad")
402402 else if ((startHeight > height))
403403 then throw("Launchpad sale not started yet")
404404 else if ((height > (startHeight + duration)))
405405 then throw("Launchpad sale ended")
406406 else if (if ((size(i.payments) != 1))
407407 then true
408408 else (pmtAssetId != buyAssetId))
409409 then throw((("One attached payment in " + buyAssetName) + " expected"))
410410 else {
411411 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
412412 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
413- let $t01949119635 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
414- let tokenId = $t01949119635._1
415- let tokenStrAssetId = $t01949119635._2
416- let tokenAssetName = $t01949119635._3
417- let tokenDecimals = $t01949119635._4
413+ let $t01952319667 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
414+ let tokenId = $t01952319667._1
415+ let tokenStrAssetId = $t01952319667._2
416+ let tokenAssetName = $t01952319667._3
417+ let tokenDecimals = $t01952319667._4
418418 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
419419 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
420420 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
421421 let buyPriceWithComission = (buyTicketAmount * (ticketPrice + commissionPerTicket))
422422 let change = (pmtAmount - buyPriceWithComission)
423423 if ((buyTicketAmount == 0))
424424 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
425425 else if ((change != 0))
426426 then throw((((("Wrong payment. To buy " + toString(buyTicketAmount)) + "tickets you need to pay ") + toString(buyPriceWithComission)) + buyAssetName))
427427 else {
428428 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets)), "")
429429 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyHCTicketLastNumber))
430430 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + buyTicketAmount)))
431431 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
432432 then ("," + boughtRange)
433433 else ("" + boughtRange)))
434434 let inv = if ((buyAssetId == USDN))
435435 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
436436 else 0
437437 if ((inv == inv))
438438 then {
439439 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount), (boughtHCTicketsAmount + buyTicketAmount)), IntegerEntry((toString(launchpadId) + keyHCTicketLastNumber), (lastBoughtTicketNumber + buyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets), newUserBoughtTicketsNumbers)]
440440 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
441441 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
442442 else baseEntry
443443 }
444444 else throw("Strict value is not equal to itself.")
445445 }
446446 }
447447 }
448448
449449
450450
451451 @Callable(i)
452452 func finalise (launchpadId,vrfHeight,secretWord) = {
453453 let savedHash = getStringValue(this, (toString(launchpadId) + keyVerifyHash))
454454 let calcHash = toBase58String(sha256((toBytes(vrfHeight) + toBytes(secretWord))))
455455 if (!(isActive))
456456 then throw("DApp is inactive at this moment")
457457 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
458458 then throw("Only admin can call this function")
459459 else if ((calcHash != savedHash))
460460 then throw("vrf Height hash not matching")
461461 else {
462- let $t02242022570 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
463- let buyAssetId = $t02242022570._1
464- let buyAssetStrId = $t02242022570._2
465- let buyAssetName = $t02242022570._3
466- let buyAssetDecimals = $t02242022570._4
462+ let $t02245222602 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
463+ let buyAssetId = $t02245222602._1
464+ let buyAssetStrId = $t02245222602._2
465+ let buyAssetName = $t02245222602._3
466+ let buyAssetDecimals = $t02245222602._4
467467 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
468468 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
469469 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
470470 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
471471 let swopfiMembersBuyAssetAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSold))
472472 let swopfiHCBuyAssetAmount = valueOrElse(getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
473473 let swopfiMembersComission = fraction(swopfiMembersBuyAssetAmount, commission, 100)
474474 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
475475 let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
476476 let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
477477 let unstakeAmount = (((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission)
478478 if ((transferedBuyAsset > (swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing)))
479479 then throw("Can't transfer negative value to project")
480480 else {
481481 let inv = if ((buyAssetId == USDN))
482482 then invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toBase58String(USDN)], nil)
483483 else 0
484484 if ((inv == inv))
485485 then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, ((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
486486 else throw("Strict value is not equal to itself.")
487487 }
488488 }
489489 }
490490
491491
492492
493493 @Callable(i)
494494 func claim (launchpadId) = {
495495 let userClaimStatus = valueOrElse(getBoolean(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus)), false)
496496 let boughtTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
497497 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
498498 if (!(isActive))
499499 then throw("DApp is inactive at this moment")
500500 else if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
501501 then throw("You can't claim because results are not finalized")
502502 else if (userClaimStatus)
503503 then throw("You are already claimed")
504504 else if (if ((boughtTickets == 0))
505505 then (boughtAllocations == 0)
506506 else false)
507507 then throw("You can't claim because you don't buy anything")
508508 else {
509- let $t02542925579 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
510- let buyAssetId = $t02542925579._1
511- let buyAssetStrId = $t02542925579._2
512- let buyAssetName = $t02542925579._3
513- let buyAssetDecimals = $t02542925579._4
509+ let $t02546125611 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
510+ let buyAssetId = $t02546125611._1
511+ let buyAssetStrId = $t02546125611._2
512+ let buyAssetName = $t02546125611._3
513+ let buyAssetDecimals = $t02546125611._4
514514 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
515515 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
516516 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
517517 let allowedAllocations = min([boughtAllocations, awailableAllocations])
518518 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
519519 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
520- let $t02622626370 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521- let tokenId = $t02622626370._1
522- let tokenStrAssetId = $t02622626370._2
523- let tokenAssetName = $t02622626370._3
524- let tokenDecimals = $t02622626370._4
520+ let $t02625826402 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521+ let tokenId = $t02625826402._1
522+ let tokenStrAssetId = $t02625826402._2
523+ let tokenAssetName = $t02625826402._3
524+ let tokenDecimals = $t02625826402._4
525525 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
526526 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
527527 let transferTokensAmount = ((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation))
528528 let notAllowedAllocationsTokens = ((boughtAllocations - allowedAllocations) * tokensPerAllocation)
529529 let buyAssetForAllocations = fraction(fraction(notAllowedAllocationsTokens, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
530530 let buyAssetForUnwonnedTickets = fraction(((boughtTickets - wonnedTickets) * ticketPrice), (100 + commission), 100)
531531 if (if ((0 > buyAssetForAllocations))
532532 then true
533533 else (0 > buyAssetForUnwonnedTickets))
534534 then throw("Error with allowed allocation param or wonned tickets param please contact support")
535535 else {
536536 let returnedBuyAssetAmount = (buyAssetForUnwonnedTickets + buyAssetForUnwonnedTickets)
537537 let transferUsdn = if ((returnedBuyAssetAmount > 0))
538538 then [ScriptTransfer(i.caller, returnedBuyAssetAmount, buyAssetId)]
539539 else nil
540540 let transferTokens = if ((transferTokensAmount > 0))
541541 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
542542 else nil
543543 let inv = if (if ((returnedBuyAssetAmount > 0))
544544 then (buyAssetId == USDN)
545545 else false)
546546 then invoke(stakingUSDNAddress, "unlockNeutrino", [returnedBuyAssetAmount, toBase58String(USDN)], nil)
547547 else 0
548548 if ((inv == inv))
549549 then (([BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true)] ++ transferTokens) ++ transferUsdn)
550550 else throw("Strict value is not equal to itself.")
551551 }
552552 }
553553 }
554554
555555
556556
557557 @Callable(i)
558558 func claimFreezeToken (launchpadId) = {
559559 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
560560 if (!(isActive))
561561 then throw("DApp is inactive at this moment")
562562 else if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
563563 then throw("You can't claim because results are not finalized")
564564 else if (!(freezeAdditionalToken))
565565 then throw("There are no additional token freezing for this launchpad")
566566 else {
567567 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyFreezeTokenId)))
568568 let userTokensFreezed = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken)), 0)
569569 let startHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyStartHeight)), 0)
570570 let duration = valueOrElse(getInteger(this, (toString(launchpadId) + keyDuration)), 0)
571571 let freezeTokenDuration = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenDuration))
572572 let blockEndHeight = ((startHeight + duration) + freezeTokenDuration)
573573 if ((userTokensFreezed == 0))
574574 then throw("You are already claimed your tokens or not paid anything")
575575 else if ((blockEndHeight > height))
576576 then throw(("Your tokens freezed teel " + toString(blockEndHeight)))
577577 else [ScriptTransfer(i.caller, userTokensFreezed, tokenId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), 0)]
578578 }
579579 }
580580
581581
582582
583583 @Callable(i)
584584 func transferBuyAsset (launchpadId,amount) = if (!(isActive))
585585 then throw("DApp is inactive")
586586 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
587587 then throw("Only admin can call this function")
588588 else {
589589 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
590- let $t03004230192 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
591- let buyAssetId = $t03004230192._1
592- let buyAssetStrId = $t03004230192._2
593- let buyAssetName = $t03004230192._3
594- let buyAssetDecimals = $t03004230192._4
590+ let $t03007430224 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
591+ let buyAssetId = $t03007430224._1
592+ let buyAssetStrId = $t03007430224._2
593+ let buyAssetName = $t03007430224._3
594+ let buyAssetDecimals = $t03007430224._4
595595 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
596596 }
597597
598598
599599
600600 @Callable(i)
601601 func shutdown () = if (!(isActive))
602602 then throw("DApp already inactive")
603603 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
604604 then throw("Only admin can call this function")
605605 else [BooleanEntry(keyActive, false)]
606606
607607
608608
609609 @Callable(i)
610610 func activate () = if (isActive)
611611 then throw("DApp already active")
612612 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
613613 then throw("Only admin can call this function")
614614 else [BooleanEntry(keyActive, true)]
615615
616616
617617 @Verifier(tx)
618618 func verify () = {
619619 let multiSignedByAdmins = {
620620 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
621621 then 1
622622 else 0
623623 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
624624 then 1
625625 else 0
626626 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
627627 then 1
628628 else 0
629629 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
630630 }
631631 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
632632 then true
633633 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
634634 then true
635635 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
636636 then true
637637 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
638638 match tx {
639639 case dtx: DataTransaction =>
640640 if (valueOrElse(getBoolean(oracle, keyLaunchpadDataTransactionStatus), false))
641641 then signedByAdmin
642642 else false
643643 case _ =>
644644 multiSignedByAdmins
645645 }
646646 }
647647

github/deemru/w8io/873ac7e 
147.68 ms