tx · 2ddbQsLEPSBSjJWo8x6KXvXHWJuzYSnpzxGtvtvZXF2o 3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv: -0.01400000 Waves 2021.08.26 00:36 [1674419] smart account 3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv > SELF 0.00000000 Waves
{ "type": 13, "id": "2ddbQsLEPSBSjJWo8x6KXvXHWJuzYSnpzxGtvtvZXF2o", "fee": 1400000, "feeAssetId": null, "timestamp": 1629927458506, "version": 2, "chainId": 84, "sender": "3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv", "senderPublicKey": "28sGn7FYnmxceAmnGYiDiKuMK1QyXiqX8zQXfKDnrc8t", "proofs": [ "3fx4MfyscFjVdV7qyUwb91KsiJX2mftaszPe2fthRWTR1cH245X9wfSyDf38AzNgA5QvgPJAKGvQkzeLUUeVgtmh" ], "script": "base64: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IFswLjAxIC0gMU1dIFVTRFQuAwkAAGYAAAACBQAAAAxMaXN0aW5nUHJpY2UAAAAA6NSlD/8JAAACAAAAAQIAAABrSGlnaGVyIGxpc3RpbmcgUHJpY2UgaXMgRW50ZXJlZCBwZXIgdG9rZW4sIHBsZWFzZSBlbnRlciBhcyBhIHZhbGlkIHJhbmdlIGluIGJldHdlZW4gcmFuZ2UgWzAuMDEgLSAxTV0gVVNEVC4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACAgAAABJQYWlyX1VuZGVyX1ZvdGluZ18FAAAACEFzc2V0SUQxBQAAAAhBc3NldElEMQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAICAAAADlZvdGluZ19TdGF0dXNfBQAAAAhBc3NldElEMQUAAAAMdm90aW5nc3RhdHVzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAFFZvdGluZ19TdGFydF9IZWlnaHRfBQAAAAhBc3NldElEMQUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAElZvdGluZ19FbmRfSGVpZ2h0XwUAAAAIQXNzZXRJRDEFAAAADHZvdGluZ0V4cGlyZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAA5Wb3RpbmdfUGVyaW9kXwUAAAAIQXNzZXRJRDEFAAAADk5vT2ZEYXlzQmxvY2tzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAE1ZvdGluZ19MaXN0aW5nX0ZlZV8FAAAACEFzc2V0SUQxCAUAAAAEcG10MQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAPVm90ZXNfUmVxdWlyZWRfBQAAAAhBc3NldElEMQUAAAANdm90ZXNyZXF1aXJlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAA9Wb3Rlc19SZWNlaXZlZF8FAAAACEFzc2V0SUQxAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAACVByaWNlX09mXwUAAAAIQXNzZXRJRDEFAAAADExpc3RpbmdQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABBSZXZlcnNlUHJpY2VfT2ZfBQAAAAhBc3NldElEMQUAAAAMcmV2ZXJzZXByaWNlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAACkZlZUFkZHJlc3MIBQAAAARwbXQxAAAABmFtb3VudAUAAAANQmFsbGV0QXNzZXRJRAUAAAADbmlsAAAAAWkBAAAAC0lzc3VlQmFsbGV0AAAAAAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAApjdXJyZW50S2V5CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADUJhbGxldEFzc2V0SUQBAAAAIC1vWwG5neVKbxqEaKeT7hMXlhgC7/FEdjB7WHX3k6igBAAAAA5QcmljZVBlckJhbGxldAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAJQkFMTEVUL1ROBAAAAA9OZXdCYWxsZXRUb1VzZXIJAABrAAAAAwAAAAAAAAGGoAgFAAAAA3BtdAAAAAZhbW91bnQFAAAADlByaWNlUGVyQmFsbGV0BAAAABRQcmV2aW91c0lzc3VlZEJhbGxldAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAUVG90YWxfSXNzdWVkX0JhbGxldDoEAAAAEVRvdGFsSXNzdWVkQmFsbGV0CQAAZAAAAAIFAAAAFFByZXZpb3VzSXNzdWVkQmFsbGV0BQAAAA9OZXdCYWxsZXRUb1VzZXIEAAAAGlByZXZpb3VzQmFsbGV0UmVzZXJ2ZVZhbHVlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAABtUb3RhbF9CYWxsZXRfUmVzZXJ2ZV9Jbl9UTjoEAAAAEkJhbGxldFJlc2VydmVWYWx1ZQkAAGQAAAACBQAAABpQcmV2aW91c0JhbGxldFJlc2VydmVWYWx1ZQgFAAAAA3BtdAAAAAZhbW91bnQEAAAAGVByZXZpb3VzQmFsbGV0QmFja3VwUHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMCAAAAGkJhbGxldF9CYWNrdXBfVmFsdWVfSW5fVE46BAAAABFCYWxsZXRCYWNrdXBQcmljZQkAAGsAAAADAAAAAAAAAYagBQAAABJCYWxsZXRSZXNlcnZlVmFsdWUFAAAAEVRvdGFsSXNzdWVkQmFsbGV0BAAAAApGZWVBZGRyZXNzAQAAACDjrdey1Io21qI8AxObYBZMNWPHMCK947HpXHsKae68IwQAAAANRmVlUGVyY2VudGFnZQAAAAAAAAAAAQQAAAAbQmFsYW5jZVRva2Vuc1JldHVybmVkVG9Vc2VyCQAAZQAAAAIAAAAAAAAAAGQFAAAADUZlZVBlcmNlbnRhZ2UDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAK0luY29ycmVjdCBhc3NldCBhdHRhY2hlZCwgcGxlYXNlIGF0dGFjaCBUTi4DCQAAZgAAAAIAAAAAAABMS0AIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAANFBsZWFzZSBBdHRhY2ggbWluaW11bSAwLjA1IFROIFRvIElzc3VlIEJhbGxldCBBc3NldC4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAFFRvdGFsX0lzc3VlZF9CYWxsZXQ6BQAAABFUb3RhbElzc3VlZEJhbGxldAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAbVG90YWxfQmFsbGV0X1Jlc2VydmVfSW5fVE46BQAAABJCYWxsZXRSZXNlcnZlVmFsdWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGkJhbGxldF9CYWNrdXBfVmFsdWVfSW5fVE46BQAAABFCYWxsZXRCYWNrdXBQcmljZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAAdtZXNzYWdlAgAAACg8aDE+QmFsbGV0IElzc3VlZCBTdWNjZXNzZnVsbHkhPC9oMT48YnI+CQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAANQmFsbGV0QXNzZXRJRAUAAAAPTmV3QmFsbGV0VG9Vc2VyBgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIJAABpAAAAAgkAAGgAAAACBQAAAA9OZXdCYWxsZXRUb1VzZXIFAAAAG0JhbGFuY2VUb2tlbnNSZXR1cm5lZFRvVXNlcgAAAAAAAAAAZAUAAAANQmFsbGV0QXNzZXRJRAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAApGZWVBZGRyZXNzCQAAaQAAAAIJAABoAAAAAgUAAAAPTmV3QmFsbGV0VG9Vc2VyBQAAAA1GZWVQZXJjZW50YWdlAAAAAAAAAABkBQAAAA1CYWxsZXRBc3NldElEBQAAAANuaWwAAAABaQEAAAAJTGlxdWlkYXRlAAAAAAQAAAAKY3VycmVudEtleQkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAANQmFsbGV0QXNzZXRJRAEAAAAgLW9bAbmd5UpvGoRop5PuExeWGALv8UR2MHtYdfeTqKAEAAAAFFByZXZpb3VzSXNzdWVkQmFsbGV0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAABRUb3RhbF9Jc3N1ZWRfQmFsbGV0OgQAAAARVG90YWxJc3N1ZWRCYWxsZXQJAABlAAAAAgUAAAAUUHJldmlvdXNJc3N1ZWRCYWxsZXQIBQAAAANwbXQAAAAGYW1vdW50BAAAABpQcmV2aW91c0JhbGxldFJlc2VydmVWYWx1ZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAbVG90YWxfQmFsbGV0X1Jlc2VydmVfSW5fVE46BAAAABlQcmV2aW91c0JhbGxldEJhY2t1cFByaWNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAABpCYWxsZXRfQmFja3VwX1ZhbHVlX0luX1ROOgQAAAASY2FsY3VsYXRlYnVybnZhbHVlCQAAawAAAAMFAAAAGVByZXZpb3VzQmFsbGV0QmFja3VwUHJpY2UIBQAAAANwbXQAAAAGYW1vdW50AAAAAAAAAYagBAAAABJCYWxsZXRSZXNlcnZlVmFsdWUJAABlAAAAAgUAAAAaUHJldmlvdXNCYWxsZXRSZXNlcnZlVmFsdWUFAAAAEmNhbGN1bGF0ZWJ1cm52YWx1ZQQAAAARQmFsbGV0QmFja3VwUHJpY2UJAABrAAAAAwAAAAAAAAGGoAUAAAASQmFsbGV0UmVzZXJ2ZVZhbHVlBQAAABFUb3RhbElzc3VlZEJhbGxldAMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAANQmFsbGV0QXNzZXRJRAkAAAIAAAABAgAAAEpLaW5kbHkgRGVwb3NpdCBPbmx5IDQ0TXE4S3FVaE05NHQ5M01pQnEzUzIyaWl1R2N6TXhwS21zZTVkQnkydzV5IChCYWxsZXQpLgMJAABmAAAAAgAAAAAAAAGGoAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQIAAAAwQXR0YWNoIEFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAwMSBCYWxsZXQuCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAANQmFsbGV0QXNzZXRJRAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAFFRvdGFsX0lzc3VlZF9CYWxsZXQ6BQAAABFUb3RhbElzc3VlZEJhbGxldAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAbVG90YWxfQmFsbGV0X1Jlc2VydmVfSW5fVE46BQAAABJCYWxsZXRSZXNlcnZlVmFsdWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGkJhbGxldF9CYWNrdXBfVmFsdWVfSW5fVE46BQAAABFCYWxsZXRCYWNrdXBQcmljZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAAdtZXNzYWdlAgAAACw8aDE+QmFsbGV0IExpcXVpZGF0ZWQgU3VjY2Vzc2Z1bGx5ITwvaDE+PGJyPgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAEmNhbGN1bGF0ZWJ1cm52YWx1ZQUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAACERvVm90aW5nAAAAAQAAAAxFbnRlckFzc2V0SUQEAAAAA3BtdAMJAAAAAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAACxCYWxsZXQgVG9rZW4gaXMgcmVxdWlyZWQgYXMgQXR0YWNoZWQgcGF5bWVudAQAAAANY2FsbGVyYWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA1CYWxsZXRBc3NldElEAQAAACAtb1sBuZ3lSm8ahGink+4TF5YYAu/xRHYwe1h195OooAQAAAAPTmV3Vm90aW5nU3RhdHVzAgAAAARQYXNzBAAAAAtVU0RUQXNzZXRJRAEAAAAgCGWEtw/wimoa8+Jo6C4IkCTD0ydYA80s9i5eC9/aFaQEAAAAGGNoZWNrcHJvamVjdGV4cGlyZWhlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABJWb3RpbmdfRW5kX0hlaWdodF8FAAAADEVudGVyQXNzZXRJRAQAAAAZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAICAAAAElBhaXJfVW5kZXJfVm90aW5nXwUAAAAMRW50ZXJBc3NldElEBAAAABJjaGVja3ZvdGVzcmVxdWlyZWQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAPVm90ZXNfUmVxdWlyZWRfBQAAAAxFbnRlckFzc2V0SUQEAAAAEmNoZWNrdm90ZXNyZWNlaXZlZAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAA9Wb3Rlc19SZWNlaXZlZF8FAAAADEVudGVyQXNzZXRJRAQAAAAMVm90aW5nU3RhdHVzCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAICAAAADlZvdGluZ19TdGF0dXNfBQAAAAxFbnRlckFzc2V0SUQEAAAADGN1cnJlbnR2b3RlcwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAICAAAAD1ZvdGVzX1JlY2VpdmVkXwUAAAAMRW50ZXJBc3NldElEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAADW5ld3ZvdGVzY291bnQJAABkAAAAAgUAAAAMY3VycmVudHZvdGVzCAUAAAADcG10AAAABmFtb3VudAQAAAAPaW5kaXZpZHVhbHZvdGVzBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAD1ZvdGVzX1JlY2VpdmVkXwUAAAANY2FsbGVyYWRkcmVzcwIAAAABXwUAAAAMRW50ZXJBc3NldElEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAAEAAAAFGluZGl2aWR1YWx2b3Rlc2NvdW50CQAAZAAAAAIFAAAAD2luZGl2aWR1YWx2b3RlcwgFAAAAA3BtdAAAAAZhbW91bnQEAAAADmNoZWNrd2hpdGVsaXN0CQAAZwAAAAIFAAAAEmNoZWNrdm90ZXNyZWNlaXZlZAUAAAASY2hlY2t2b3Rlc3JlcXVpcmVkBAAAAARpbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkAAlkAAAABBQAAAAxFbnRlckFzc2V0SUQJAAEsAAAAAgkAASwAAAACAgAAAAZBc3NldCAFAAAADEVudGVyQXNzZXRJRAIAAAAOIGRvZXNuJ3QgZXhpc3QEAAAACGRlY2ltYWxzCAUAAAAEaW5mbwAAAAhkZWNpbWFscwMJAQAAAAIhPQAAAAIFAAAAGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QFAAAADEVudGVyQXNzZXRJRAkAAAIAAAABAgAAACVQYWlyIGlzIG5vdCBhdmFpbGFibGUgaW4gVm90aW5nIExpc3QuAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAGGNoZWNrcHJvamVjdGV4cGlyZWhlaWdodAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAUVm90aW5nIHRpbWVsaW5lIGZvciAFAAAADEVudGVyQXNzZXRJRAIAAAAMIGlzIGV4cGlyZWQuAwkBAAAAAiE9AAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAA1CYWxsZXRBc3NldElECQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABNLaW5kbHkgQXR0YWNoIE9ubHkgCQACWAAAAAEFAAAADUJhbGxldEFzc2V0SUQCAAAACiAoQmFsbGV0KS4DCQAAAAAAAAIFAAAADFZvdGluZ1N0YXR1cwUAAAAPTmV3Vm90aW5nU3RhdHVzCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAtWb3RpbmcgZm9yIAUAAAAMRW50ZXJBc3NldElEAgAAADUgcGFpciBpcyBjb21wbGV0ZWQgYW5kIGl04oCZcyBhdmFpbGFibGUgaW4gd2hpdGVsaXN0LgMFAAAADmNoZWNrd2hpdGVsaXN0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgIAAAAOVm90aW5nX1N0YXR1c18FAAAADEVudGVyQXNzZXRJRAUAAAAPTmV3Vm90aW5nU3RhdHVzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAADERlY2ltYWxzX29mXwUAAAAMRW50ZXJBc3NldElEBQAAAAhkZWNpbWFscwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8JAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQCAAAAAV8FAAAADEVudGVyQXNzZXRJRAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABNUb3RhbF9vZl9wYWlyX1R4bnNfBQAAAAxFbnRlckFzc2V0SUQAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAE1RvdGFsX29mX1N3YXBzX1R4bnMAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAZVG90YWxfU3dhcF9GZWVfQ29sbGVjdGVkXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQAAAAxFbnRlckFzc2V0SUQAAAAAAAAAAAAFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAA9Wb3Rlc19SZWNlaXZlZF8FAAAADEVudGVyQXNzZXRJRAUAAAANbmV3dm90ZXNjb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAPVm90ZXNfUmVjZWl2ZWRfBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQFAAAAFGluZGl2aWR1YWx2b3Rlc2NvdW50BQAAAANuaWwAAAABaQEAAAAMSXNzdWVMUFRva2VuAAAAAQAAAAxFbnRlckFzc2V0SUQEAAAABGluZm8JAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA+wAAAABCQACWQAAAAEFAAAADEVudGVyQXNzZXRJRAkAASwAAAACCQABLAAAAAICAAAABkFzc2V0IAUAAAAMRW50ZXJBc3NldElEAgAAAA4gZG9lc24ndCBleGlzdAQAAAAEbmFtZQgFAAAABGluZm8AAAAEbmFtZQQAAAAHTFBpc3N1ZQkABEIAAAAFCQABLAAAAAICAAAAA0xQXwkAAS8AAAACBQAAAARuYW1lAAAAAAAAAAAGCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAANMUF8JAAEvAAAAAgUAAAAEbmFtZQAAAAAAAAAABgIAAAAuIGlzIGEgTGlxdWlkaXR5IFByb3ZpZGVyIFRva2VuIElzc3VlZCBBZ2FpbnN0IAUAAAAMRW50ZXJBc3NldElEAAAAAAAAAAABAAAAAAAAAAAABgQAAAAETFBpZAkABDgAAAABBQAAAAdMUGlzc3VlBAAAAAxjaGVja0xQVG9rZW4JAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAADTFBfBQAAAAxFbnRlckFzc2V0SUQDCQAAAAAAAAIFAAAADGNoZWNrTFBUb2tlbgkAASwAAAACAgAAAANMUF8FAAAADEVudGVyQXNzZXRJRAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAADTFBfBQAAAAxFbnRlckFzc2V0SUQCAAAASyBhbHJlYWR5IEV4aXN0IGluIG91ciBMaXN0LiBZb3UgY2FuJ3QgZ2VuZXJhdGUgYW5vdGhlciBMUCBUb2tlbiBhZ2FpbnN0IGl0LgkABEwAAAACBQAAAAdMUGlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgIAAAADTFBfBQAAAAxFbnRlckFzc2V0SUQJAAJYAAAAAQUAAAAETFBpZAUAAAADbmlsAAAAAWkBAAAAE1dpdGhkcmF3Vm90ZWRUb2tlbnMAAAABAAAADEVudGVyQXNzZXRJRAQAAAADcG10CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAA1jYWxsZXJhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADUJhbGxldEFzc2V0SUQBAAAAIC1vWwG5neVKbxqEaKeT7hMXlhgC7/FEdjB7WHX3k6igBAAAABhjaGVja3Byb2plY3RleHBpcmVoZWlnaHQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAASVm90aW5nX0VuZF9IZWlnaHRfBQAAAAxFbnRlckFzc2V0SUQEAAAAGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABJQYWlyX1VuZGVyX1ZvdGluZ18FAAAADEVudGVyQXNzZXRJRAQAAAAWY2hlY2t1c2Vydm90aW5nYmFsYW5jZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAPVm90ZXNfUmVjZWl2ZWRfBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQEAAAAHXBlbmRpbmdibG9ja3Nmb3Jwcm9qZWN0ZXhwaXJlCQAAZQAAAAIFAAAAGGNoZWNrcHJvamVjdGV4cGlyZWhlaWdodAUAAAAGaGVpZ2h0AwkBAAAAAiE9AAAAAgUAAAAZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAUAAAAMRW50ZXJBc3NldElECQAAAgAAAAECAAAAJVBhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBWb3RpbmcgTGlzdC4DCQAAZgAAAAIFAAAAGGNoZWNrcHJvamVjdGV4cGlyZWhlaWdodAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAFRWb3RpbmcgQWxyZWFkeSBSdW5uaW5nLiBZb3UgY2FuIHdpdGhkcmF3IHlvdXIgQmFsbGV0IFRva2VuIG9ubHkgYWZ0ZXIgdGhlIGV4cGlyZSBvZiAJAAGkAAAAAQUAAAAdcGVuZGluZ2Jsb2Nrc2ZvcnByb2plY3RleHBpcmUCAAAAByBCbG9ja3MDCQAAZwAAAAIAAAAAAAAAAAAFAAAAFmNoZWNrdXNlcnZvdGluZ2JhbGFuY2UJAAACAAAAAQIAAAA+WW91IGRvbid0IGhhdmUgYW55IGR1ZXMgb2YgYmFsbGV0IGJhbGFuY2UgaW4gdGhpcyBWb3RpbmcgUGFpci4DCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAUURvbid0IGF0dGFjaCBhbnkgb3RoZXIgYXNzZXQuIFBsZWFzZSBhdHRhY2ggMC4xIFROIGFzIGEgZmVlIHRvIHJlbGVhc2UgeW91ciB0b2tlbgMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAGYW1vdW50AAAAAAAAmJaACQAAAgAAAAECAAAANFBsZWFzZSBhdHRhY2gg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BQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABVOZXdTdW11cG9mVVNEVEJhbGFuY2UJAABlAAAAAgUAAAAaQ2hlY2tPbGRCYWxhbmNlQXNzZXR0b1VTRFQFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0BAAAAA9TdW11cG9mU3dhcFR4bnMEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwIAAAATVG90YWxfb2ZfU3dhcHNfVHhucwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABJOZXdTdW11cG9mU3dhcFR4bnMJAABkAAAAAgUAAAAPU3VtdXBvZlN3YXBUeG5zAAAAAAAAAAABAwkBAAAAAiE9AAAAAgUAAAAZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAUAAAAMRW50ZXJBc3NldElECQAAAgAAAAECAAAAK1BhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBXaGl0ZWxpc3RlZCBBc3NldC4DCQAAAAAAAAIFAAAADFZvdGluZ1N0YXR1cwUAAAATQ3VycmVudFZvdGluZ1N0YXR1cwkAAAIAAAABCQABLAAAAAIFAAAADEVudGVyQXNzZXRJRAIAAAAgIGlzIG5vdCBBIFdoaXRlbGlzdGVkIFRva2VuIFlldC4DCQAAAAAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAALVVNEVEFzc2V0SUQJAAACAAAAAQIAAABTWW91IGNhbid0IEF0dGFjaCBVU0RUIGFzIGFuIEF0dGFjaGVkIFBheW1lbnQuIE9ubHkgV2hpdGVsaXN0ZWQgVG9rZW5zIGFyZSBhY2NlcHRlZC4DCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAAMRW50ZXJBc3NldElECQAAAgAAAAEJAAEsAAAAAgIAAAAwSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLCBwbGVhc2UgYXR0YWNoIG9yIHNlbmQgBQAAAAxFbnRlckFzc2V0SUQDCQAAZgAAAAIAAAAAAAAAJxAFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAADRZb3VyIEF0dGFjaGVkIEFzc2V0IEFtb3VudCBpcyB2ZXJ5IGxvdy4gQXR0YWNoIE1vcmUgBQAAAAxFbnRlckFzc2V0SUQCAAAANiBUb2tlbnMgdG8gQ2xhaW0gdGhlIG1pbmltdW0gQW1vdW50IG9mIDEgY2VudCBhdGxlYXN0LgMJAAAAAAAAAgUAAAAaQ2hlY2tPbGRCYWxhbmNlQXNzZXR0b1VTRFQAAAAAAAAAAAAJAAACAAAAAQIAAABlU3dhcCBQYWlyIE5lZWQgdG8gQWRkIExpcXVpZGl0eSBmaXJzdCBpbnRvIFBvb2wuIE9ubHkgQWZ0ZXIgdGhhdCBQYWlyIHdpbGwgYmUgYWN0aXZhdGVkIGZvciBTd2FwcGluZy4DCQAAAAAAAAIFAAAAGkNoZWNrT2xkQmFsYW5jZVVTRFR0b0Fzc2V0AAAAAAAAAAAACQAAAgAAAAECAAAAZVN3YXAgUGFpciBOZWVkIHRvIEFkZCBMaXF1aWRpdHkgZmlyc3QgaW50byBQb29sLiBPbmx5IEFmdGVyIHRoYXQgUGFpciB3aWxsIGJlIGFjdGl2YXRlZCBmb3IgU3dhcHBpbmcuAwkAAGYAAAACBQAAABRxdWFudGl0eW9mcHJpY2Vhc3NldAUAAAAaQ2hlY2tPbGRCYWxhbmNlQXNzZXR0b1VTRFQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAHVBvb2wgT25seSBoYXMgYSBMaXF1aWRpdHkgb2YgCQABpAAAAAEJAABpAAAAAgUAAAAaQ2hlY2tPbGRCYWxhbmNlQXNzZXR0b1VTRFQJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAUAAAACVVACAAAAHyBVU0RULiBBZGQgTGlxdWlkaXR5IGludG8gUG9vbC4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAJUHJpY2VfT2ZfBQAAAAxFbnRlckFzc2V0SUQFAAAADkNoZWNrUGFpclByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAGVRvdGFsX1N3YXBfRmVlX0NvbGxlY3RlZF8JAAJYAAAAAQUAAAALVVNEVEFz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AAAAAAAAAAAAAAAAAAAAAAUAAAACVVAEAAAAD2dldEFzc2V0QmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzCQACWQAAAAEFAAAADEVudGVyQXNzZXRJRAQAAAAPbmV3QXNzZXRCYWxhbmNlCQAAZQAAAAIFAAAAD2dldEFzc2V0QmFsYW5jZQUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQDCQEAAAACIT0AAAACBQAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAAArUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFdoaXRlbGlzdGVkIEFzc2V0LgMJAAAAAAAAAgUAAAAMVm90aW5nU3RhdHVzBQAAABNDdXJyZW50Vm90aW5nU3RhdHVzCQAAAgAAAAEJAAEsAAAAAgUAAAAMRW50ZXJBc3NldElEAgAAACAgaXMgbm90IEEgV2hpdGVsaXN0ZWQgVG9rZW4gWWV0LgMJAAAAAAAAAgUAAAAMRW50ZXJBc3NldElECQACWAAAAAEFAAAAC1VTRFRBc3NldElECQAAAgAAAAECAAAAe0lucHV0IGNhbiBOZXZlciBiZSBhIFVTRFQgQXNzZXRJRC4gRW50ZXIgV2hpdGVsaXN0ZWQgQXNzZXRJRCBpbiBpbnB1dCBhbmQgQXR0YWNoIFVTRFQgYXMgYW4gYXR0YWNobWVudCBUb2tlbiBpbiBwYXltZW50WzFdLgMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAALVVNEVEFzc2V0SUQJAAACAAAAAQIAAAB+WW91IGNhbiBBdHRhY2ggVVNEVCBhcyBhbiBBdHRhY2hlZCBQYXltZW50WzFdIHRvIFN3YXAgVVNEVCBUbyBSZXF1aXJlZCBUb2tlbi4gQW55IG90aGVyIGFzc2V0IGVsc2UgdGhhbiBVU0RUIHdpbGwgYmUgcmVqZWN0ZWQuAwkAAGYAAAACAAAAAAAAD0JACAUAAAADcG10AAAABmFtb3VudAkAAAIAAAABAgAAAFlZb3VyIEF0dGFjaGVkIFVTRFQgQW1vdW50IGlzIHZlcnkgbG93LiBBdHRhY2ggQXRsZWFzdCAxIFVTRFQgdG8gQ2xhaW0gdGhlIG1pbmltdW0g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dElELiBFbnRlciBXaGl0ZWxpc3RlZCBBc3NldElEIGluIGlucHV0IGFzIHdlbGwgYXMgaW4gcGF5bWVudFsxXSBhbmQgQXR0YWNoIFVTRFQgYXMgYW4gYXR0YWNobWVudCBUb2tlbiBpbiBwYXltZW50WzJdLgMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAIJAAACAAAAAQIAAACLVHdvIGF0dGFjaGVkIGFzc2V0cyBleHBlY3RlZCBhcyBwYXltZW50IGluIDUwJS01MCUuIEtpbmRseSBBdHRhY2ggcGF5bWVudDEgPSBVU0RUIFRva2VuIGFuZCBwYXltZW50MiA9IFRva2VuIHlvdSB3YW50IHRvIGFkZCBmb3IgTGlxdWlkaXR5LgMJAQAAAAIhPQAAAAIIBQAAAARwbXQxAAAAB2Fzc2V0SWQFAAAAC1VTRFRBc3NldElECQAAAgAAAAECAAAAVEluY29ycmVjdCBhc3NldCBhdHRhY2hlZCBmb3IgTGlxdWlkaXR5IGluIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggVVNEVCBUb2tlbiBvbmx5LgMJAABmAAAAAgAAAAAAAJiWgAgFAAAABHBtdDEAAAAGYW1vdW50CQAAAgAAAAECAAAALHBsZWFzZSBhdHRhY2ggYXRsZWFzdCAxMCBVU0RUIGluIHBheW1lbnRbMV0uAwkAAAAAAAACCAUAAAAEcG10MgAAAAdhc3NldElkBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAI9Zb3UgQXR0YWNoZWQgVVNEVCBhc3NldCBmb3IgTGlxdWlkaXR5IGluIGJvdGggcGF5bWVudHMsIEtpbmRseSBBdHRhY2ggcGF5bWVudDEgPSBVU0RUIFRva2VuIGFuZCBwYXltZW50MiA9IFRva2VuIHlvdSB3YW50IHRvIGFkZCBmb3IgTGlxdWlkaXR5LgMJAQAAAAIhPQAAAAIIBQAAAARwbXQyAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAAMRW50ZXJBc3NldElECQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAA1Bc3NldCBTdHJpbmcgBQAAAAxFbnRlckFzc2V0SUQCAAAATiBpcyBub3QgbWF0Y2hpbmcgd2l0aCBhdHRhY2hlZCBwYXltZW50WzJdLiBTdHJpbmcgYW5kIHBheW1lbnRbMl0gbXVzdCBiZSBzYW1lLgMJAQAAAAIhPQAAAAIIBQAAAARwbXQyAAAABmFtb3VudAUAAAAWcXVhbnRpdHlvZkVudGVyQXNzZXRJRAkAAAIAAAABCQABLAAAAAICAAAAWEF0dGFjaGVkIHBheW1lbnRbMl0gcXVhbnRpdHkgaXMgbm90IG1hdGNoaW5nIGFzIHBlciBhdHRhY2hlZCBwYXltZW50WzFdIFVTRFQuSXQgbXVzdCBiZSAJAAGkAAAAAQUAAAAWcXVhbnRpdHlvZkVudGVyQXNzZXRJRAMJAQAAAAIhPQAAAAIFAAAAFUNoZWNrUmV2ZXJzZVBhaXJQcmljZQUAAAAcY2hlY2twb2ludFRvVmVyaWZ5Qm90aFByaWNlcwkAAAIAAAABAgAAAD9QcmljZSBhbmQgUmV2ZXJzZSBQcmljZSBhcmUgTWlzbWF0Y2hlZCBvciBtYW5pcHVsYXRlZCBtYW51YWxseS4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAJUHJpY2VfT2ZfBQAAAAxFbnRlckFzc2V0SUQFAAAADkNoZWNrUGFpclByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAEFJldmVyc2VQcmljZV9PZl8FAAAADEVudGVyQXNzZXRJRAUAAAAVQ2hlY2tSZXZlcnNlUGFpclByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtCYWxhbmNlX29mXwUAAAAMRW50ZXJBc3NldElEAgAAAAFfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEBQAAABROZXdVU0RUSG9sZGluZ0luUGFpcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8JAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQCAAAAAV8FAAAADEVudGVyQXNzZXRJRAUAAAAVTmV3QXNzZXRIb2xkaW5nSW5QYWlyBQAAAANuaWwAAAABaQEAAAAPUmVtb3ZlUGFpckVudHJ5AAAAAQAAAAxFbnRlckFzc2V0SUQEAAAAC2FkbWlucmlnaHRzCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzAgAAABVQb2xhcml0eV9BZG1pbl9SaWdodHMEAAAAC1VTRFRBc3NldElEAQAAACAIZYS3D/CKahrz4mjoLgiQJMPTJ1gDzSz2Ll4L39oVpAQAAAAYY2hlY2twcm9qZWN0ZXhwaXJlaGVpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAICAAAAElZvdGluZ19FbmRfSGVpZ2h0XwUAAAAMRW50ZXJBc3NldElEBAAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90CQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAASUGFpcl9VbmRlcl9Wb3RpbmdfBQAAAAxFbnRlckFzc2V0SUQEAAAADFZvdGluZ1N0YXR1cwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAA5Wb3RpbmdfU3RhdHVzXwUAAAAMRW50ZXJBc3NldElEBAAAAA9OZXdWb3RpbmdTdGF0dXMCAAAABFBhc3MEAAAADWNhbGxlcmFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAANY3VycmVudGhlaWdodAUAAAAGaGVpZ2h0BAAAAB1wZW5kaW5nYmxvY2tzZm9ycHJvamVjdGV4cGlyZQkAAGUAAAACBQAAABhjaGVja3Byb2plY3RleHBpcmVoZWlnaHQFAAAABmhlaWdodAMJAQAAAAIhPQAAAAIFAAAAGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QFAAAADEVudGVyQXNzZXRJRAkAAAIAAAABAgAAACVQYWlyIGlzIG5vdCBhdmFpbGFibGUgaW4gVm90aW5nIExpc3QuAwkBAAAAAiE9AAAAAgUAAAALYWRtaW5yaWdodHMFAAAADWNhbGxlcmFkZHJlc3MJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAIkkga25vdyBZb3UgYXJlIG5vdCBBbiBBZG1pbi4gT25seSAFAAAAC2FkbWlucmlnaHRzAgAAAB8gaGFzIHJpZ2h0cyB0byByZW1vdmUgdGhlIHBhaXIuAwkAAGYAAAACBQAAABhjaGVja3Byb2plY3RleHBpcmVoZWlnaHQFAAAABmhlaWdodAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAA2Vm90aW5nIEFscmVhZHkgUnVubmluZy4gWW91IGNhbiByZW1vdmUgdGhlIHBhaXIgYWZ0ZXIgCQABpAAAAAEFAAAAHXBlbmRpbmdibG9ja3Nmb3Jwcm9qZWN0ZXhwaXJlAgAAAAcgQmxvY2tzAwkAAAAAAAACBQAAAAxWb3RpbmdTdGF0dXMFAAAAD05ld1ZvdGluZ1N0YXR1cwkAAAIAAAABCQABLAAAAAIFAAAADEVudGVyQXNzZXRJRAIAAAAsIGlzIG5vdyBXaGl0ZWxpc3RlZC4gU28geW91IGNhbid0IHJlbW92ZSBpdC4JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACAgAAABJQYWlyX1VuZGVyX1ZvdGluZ18FAAAADEVudGVyQXNzZXRJRAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAICAAAAFFZvdGluZ19TdGFydF9IZWlnaHRfBQAAAAxFbnRlckFzc2V0SUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACAgAAABJWb3RpbmdfRW5kX0hlaWdodF8FAAAADEVudGVyQXNzZXRJRAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAICAAAADlZvdGluZ19QZXJpb2RfBQAAAAxFbnRlckFzc2V0SUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACAgAAAA9Wb3Rlc19SZXF1aXJlZF8FAAAADEVudGVyQXNzZXRJRAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAICAAAAE1ZvdGluZ19MaXN0aW5nX0ZlZV8FAAAADEVudGVyQXNzZXRJRAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAICAAAADlZvdGluZ19TdGF0dXNfBQAAAAxFbnRlckFzc2V0SUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACAgAAAA9Wb3Rlc19SZWNlaXZlZF8FAAAADEVudGVyQXNzZXRJRAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAICAAAACVByaWNlX09mXwUAAAAMRW50ZXJBc3NldElECQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgIAAAAQUmV2ZXJzZVByaWNlX09mXwUAAAAMRW50ZXJBc3NldElEBQAAAANuaWwAAAABaQEAAAALUmVtb3ZlRW50cnkAAAAEAAAAA0tleQAAAARLZXkxAAAABEtleTIAAAAES2V5MwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAANLZXkJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAES2V5MQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAARLZXkyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAABEtleTMFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4CQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleRtQ7J4=", "height": 1674419, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DZfRrAyPFPE4uVcvaoESfm7SiZLASS8oATJimbLWkskK Next: 9kJc9kc9oXBbH6nqAX2RGCyUiC1cT37A3oD7bQs67AVY Diff:
Old | New | Differences | |
---|---|---|---|
149 | 149 | let name = info.name | |
150 | 150 | let LPissue = Issue(("LP_" + take(name, 6)), ((("LP_" + take(name, 6)) + " is a Liquidity Provider Token Issued Against ") + EnterAssetID), 1, 0, true) | |
151 | 151 | let LPid = calculateAssetId(LPissue) | |
152 | - | let checkLPToken = | |
152 | + | let checkLPToken = getStringValue(this, ("LP_" + EnterAssetID)) | |
153 | 153 | if ((checkLPToken == ("LP_" + EnterAssetID))) | |
154 | 154 | then throw((("LP_" + EnterAssetID) + " already Exist in our List. You can't generate another LP Token against it.")) | |
155 | 155 | else [LPissue, StringEntry(("LP_" + EnterAssetID), toBase58String(LPid))] |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | ||
5 | 5 | ||
6 | 6 | @Callable(i) | |
7 | 7 | func RegisterPairForVoting (AssetID1,days,ListingPrice) = { | |
8 | 8 | let pmt1 = value(i.payments[0]) | |
9 | 9 | let pmt2 = value(i.payments[1]) | |
10 | 10 | let FeeAddress = base58'GKmJ6BchUgQfwKp4mp5eX8Y9xLioYRm6e1gDfFgdAcCr' | |
11 | 11 | let maximumvotingdays = 90 | |
12 | 12 | let BalletAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y' | |
13 | 13 | let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H' | |
14 | 14 | let currentKey = toBase58String(i.caller.bytes) | |
15 | 15 | let TN = !(isDefined(pmt2.assetId)) | |
16 | 16 | let oneday = 1440 | |
17 | 17 | let NoOfDaysBlocks = (oneday * days) | |
18 | 18 | let gap = (NoOfDaysBlocks - 43199) | |
19 | 19 | let votesrequired = ((100000 + ((11574 * gap) / 10000)) * 100000000) | |
20 | 20 | let votingExpire = (height + NoOfDaysBlocks) | |
21 | 21 | let fetchpair = getString(this, ("Pair_Under_Voting_" + AssetID1)) | |
22 | 22 | let votingstatus = "Fail" | |
23 | 23 | let assetinfopmt2 = fromBase58String(AssetID1) | |
24 | 24 | let reverseprice = fraction(1, 1000000000000, ListingPrice) | |
25 | 25 | if ((43 > size(AssetID1))) | |
26 | 26 | then throw("Wrong AssetID1 is Entered for Voting. Please Enter a Valid AssetID1. Probably you entered an ASSETID1 less than 43 Chars.") | |
27 | 27 | else if ((29 >= days)) | |
28 | 28 | then throw("Enter no. of days in between 30 to 90.") | |
29 | 29 | else if ((days > maximumvotingdays)) | |
30 | 30 | then throw("You Entered days greater than 90 please Enter no. of days in between 1 to 90.") | |
31 | 31 | else if ((fetchpair == AssetID1)) | |
32 | 32 | then throw("Pair Already Exist in Voting List.") | |
33 | 33 | else if ((size(i.payments) != 2)) | |
34 | 34 | then throw("Two attached assets expected as payment. Kindly Attach payment1 = Ballet Token and payment2 = Token you want to add to List for Voting.") | |
35 | 35 | else if ((pmt1.assetId != BalletAssetID)) | |
36 | 36 | then throw("Incorrect asset attached for Voting in payment[1], please attach 1000 Ballet Token only.") | |
37 | 37 | else if ((pmt1.amount != 10000000)) | |
38 | 38 | then throw((((("You attached only " + toString(fraction(pmt1.amount, 1, 100000000))) + ".") + toString(fraction(pmt1.amount, 1, 10000000))) + " Ballet for Voting in payment[1], please attach 1000 Ballet Token only.")) | |
39 | 39 | else if ((pmt2.assetId != assetinfopmt2)) | |
40 | 40 | then throw("Asset String Attached in ASSETID1 is not matching with Payment2 AssetID.") | |
41 | 41 | else if ((TN == true)) | |
42 | 42 | then throw("You Attached TN Asset ID for Voting, please attach the Token You want to list in payment[2].") | |
43 | 43 | else if ((pmt2.assetId == BalletAssetID)) | |
44 | 44 | then throw("You Attached Ballet asset for Voting in both payments, please attach the Token You want to list in payment[2].") | |
45 | 45 | else if ((9999 >= ListingPrice)) | |
46 | 46 | then throw("Lower listing Price is Entered per token, please enter as a valid range in between range [0.01 - 1M] USDT.") | |
47 | 47 | else if ((ListingPrice > 999999999999)) | |
48 | 48 | then throw("Higher listing Price is Entered per token, please enter as a valid range in between range [0.01 - 1M] USDT.") | |
49 | 49 | else [StringEntry(("Pair_Under_Voting_" + AssetID1), AssetID1), StringEntry(("Voting_Status_" + AssetID1), votingstatus), IntegerEntry(("Voting_Start_Height_" + AssetID1), height), IntegerEntry(("Voting_End_Height_" + AssetID1), votingExpire), IntegerEntry(("Voting_Period_" + AssetID1), NoOfDaysBlocks), IntegerEntry(("Voting_Listing_Fee_" + AssetID1), pmt1.amount), IntegerEntry(("Votes_Required_" + AssetID1), votesrequired), IntegerEntry(("Votes_Received_" + AssetID1), 0), IntegerEntry(("Price_Of_" + AssetID1), ListingPrice), IntegerEntry(("ReversePrice_Of_" + AssetID1), reverseprice), ScriptTransfer(addressFromPublicKey(FeeAddress), pmt1.amount, BalletAssetID)] | |
50 | 50 | } | |
51 | 51 | ||
52 | 52 | ||
53 | 53 | ||
54 | 54 | @Callable(i) | |
55 | 55 | func IssueBallet () = { | |
56 | 56 | let pmt = value(i.payments[0]) | |
57 | 57 | let currentKey = toBase58String(i.caller.bytes) | |
58 | 58 | let BalletAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y' | |
59 | 59 | let PricePerBallet = getIntegerValue(this, "BALLET/TN") | |
60 | 60 | let NewBalletToUser = fraction(100000, pmt.amount, PricePerBallet) | |
61 | 61 | let PreviousIssuedBallet = getIntegerValue(this, "Total_Issued_Ballet:") | |
62 | 62 | let TotalIssuedBallet = (PreviousIssuedBallet + NewBalletToUser) | |
63 | 63 | let PreviousBalletReserveValue = getIntegerValue(this, "Total_Ballet_Reserve_In_TN:") | |
64 | 64 | let BalletReserveValue = (PreviousBalletReserveValue + pmt.amount) | |
65 | 65 | let PreviousBalletBackupPrice = getIntegerValue(this, "Ballet_Backup_Value_In_TN:") | |
66 | 66 | let BalletBackupPrice = fraction(100000, BalletReserveValue, TotalIssuedBallet) | |
67 | 67 | let FeeAddress = base58'GKmJ6BchUgQfwKp4mp5eX8Y9xLioYRm6e1gDfFgdAcCr' | |
68 | 68 | let FeePercentage = 1 | |
69 | 69 | let BalanceTokensReturnedToUser = (100 - FeePercentage) | |
70 | 70 | if (isDefined(pmt.assetId)) | |
71 | 71 | then throw("Incorrect asset attached, please attach TN.") | |
72 | 72 | else if ((5000000 > pmt.amount)) | |
73 | 73 | then throw("Please Attach minimum 0.05 TN To Issue Ballet Asset.") | |
74 | 74 | else [IntegerEntry("Total_Issued_Ballet:", TotalIssuedBallet), IntegerEntry("Total_Ballet_Reserve_In_TN:", BalletReserveValue), IntegerEntry("Ballet_Backup_Value_In_TN:", BalletBackupPrice), StringEntry("message", "<h1>Ballet Issued Successfully!</h1><br>"), Reissue(BalletAssetID, NewBalletToUser, true), ScriptTransfer(i.caller, ((NewBalletToUser * BalanceTokensReturnedToUser) / 100), BalletAssetID), ScriptTransfer(addressFromPublicKey(FeeAddress), ((NewBalletToUser * FeePercentage) / 100), BalletAssetID)] | |
75 | 75 | } | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | ||
79 | 79 | @Callable(i) | |
80 | 80 | func Liquidate () = { | |
81 | 81 | let currentKey = toBase58String(i.callerPublicKey) | |
82 | 82 | let pmt = value(i.payments[0]) | |
83 | 83 | let BalletAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y' | |
84 | 84 | let PreviousIssuedBallet = getIntegerValue(this, "Total_Issued_Ballet:") | |
85 | 85 | let TotalIssuedBallet = (PreviousIssuedBallet - pmt.amount) | |
86 | 86 | let PreviousBalletReserveValue = getIntegerValue(this, "Total_Ballet_Reserve_In_TN:") | |
87 | 87 | let PreviousBalletBackupPrice = getIntegerValue(this, "Ballet_Backup_Value_In_TN:") | |
88 | 88 | let calculateburnvalue = fraction(PreviousBalletBackupPrice, pmt.amount, 100000) | |
89 | 89 | let BalletReserveValue = (PreviousBalletReserveValue - calculateburnvalue) | |
90 | 90 | let BalletBackupPrice = fraction(100000, BalletReserveValue, TotalIssuedBallet) | |
91 | 91 | if ((pmt.assetId != BalletAssetID)) | |
92 | 92 | then throw("Kindly Deposit Only 44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y (Ballet).") | |
93 | 93 | else if ((100000 > pmt.amount)) | |
94 | 94 | then throw("Attach Amount must be greater than 0.001 Ballet.") | |
95 | 95 | else [Burn(BalletAssetID, pmt.amount), IntegerEntry("Total_Issued_Ballet:", TotalIssuedBallet), IntegerEntry("Total_Ballet_Reserve_In_TN:", BalletReserveValue), IntegerEntry("Ballet_Backup_Value_In_TN:", BalletBackupPrice), StringEntry("message", "<h1>Ballet Liquidated Successfully!</h1><br>"), ScriptTransfer(i.caller, calculateburnvalue, unit)] | |
96 | 96 | } | |
97 | 97 | ||
98 | 98 | ||
99 | 99 | ||
100 | 100 | @Callable(i) | |
101 | 101 | func DoVoting (EnterAssetID) = { | |
102 | 102 | let pmt = if ((size(i.payments) == 1)) | |
103 | 103 | then i.payments[0] | |
104 | 104 | else throw("Ballet Token is required as Attached payment") | |
105 | 105 | let calleraddress = toBase58String(i.caller.bytes) | |
106 | 106 | let BalletAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y' | |
107 | 107 | let NewVotingStatus = "Pass" | |
108 | 108 | let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H' | |
109 | 109 | let checkprojectexpireheight = getIntegerValue(this, ("Voting_End_Height_" + EnterAssetID)) | |
110 | 110 | let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID)) | |
111 | 111 | let checkvotesrequired = getIntegerValue(this, ("Votes_Required_" + EnterAssetID)) | |
112 | 112 | let checkvotesreceived = getIntegerValue(this, ("Votes_Received_" + EnterAssetID)) | |
113 | 113 | let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID)) | |
114 | 114 | let currentvotes = match getInteger(this, ("Votes_Received_" + EnterAssetID)) { | |
115 | 115 | case a: Int => | |
116 | 116 | a | |
117 | 117 | case _ => | |
118 | 118 | 0 | |
119 | 119 | } | |
120 | 120 | let newvotescount = (currentvotes + pmt.amount) | |
121 | 121 | let individualvotes = match getInteger(this, ((("Votes_Received_" + calleraddress) + "_") + EnterAssetID)) { | |
122 | 122 | case b: Int => | |
123 | 123 | b | |
124 | 124 | case _ => | |
125 | 125 | 0 | |
126 | 126 | } | |
127 | 127 | let individualvotescount = (individualvotes + pmt.amount) | |
128 | 128 | let checkwhitelist = (checkvotesreceived >= checkvotesrequired) | |
129 | 129 | let info = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist")) | |
130 | 130 | let decimals = info.decimals | |
131 | 131 | if ((checkpairisavailableornot != EnterAssetID)) | |
132 | 132 | then throw("Pair is not available in Voting List.") | |
133 | 133 | else if ((height > checkprojectexpireheight)) | |
134 | 134 | then throw((("Voting timeline for " + EnterAssetID) + " is expired.")) | |
135 | 135 | else if ((pmt.assetId != BalletAssetID)) | |
136 | 136 | then throw((("Kindly Attach Only " + toBase58String(BalletAssetID)) + " (Ballet).")) | |
137 | 137 | else if ((VotingStatus == NewVotingStatus)) | |
138 | 138 | then throw((("Voting for " + EnterAssetID) + " pair is completed and it’s available in whitelist.")) | |
139 | 139 | else if (checkwhitelist) | |
140 | 140 | then [StringEntry(("Voting_Status_" + EnterAssetID), NewVotingStatus), IntegerEntry(("Decimals_of_" + EnterAssetID), decimals), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), 0), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), 0), IntegerEntry(("Total_of_pair_Txns_" + EnterAssetID), 0), IntegerEntry("Total_of_Swaps_Txns", 0), IntegerEntry(("Total_Swap_Fee_Collected_" + toBase58String(USDTAssetID)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), 0)] | |
141 | 141 | else [IntegerEntry(("Votes_Received_" + EnterAssetID), newvotescount), IntegerEntry(((("Votes_Received_" + calleraddress) + "_") + EnterAssetID), individualvotescount)] | |
142 | 142 | } | |
143 | 143 | ||
144 | 144 | ||
145 | 145 | ||
146 | 146 | @Callable(i) | |
147 | 147 | func IssueLPToken (EnterAssetID) = { | |
148 | 148 | let info = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist")) | |
149 | 149 | let name = info.name | |
150 | 150 | let LPissue = Issue(("LP_" + take(name, 6)), ((("LP_" + take(name, 6)) + " is a Liquidity Provider Token Issued Against ") + EnterAssetID), 1, 0, true) | |
151 | 151 | let LPid = calculateAssetId(LPissue) | |
152 | - | let checkLPToken = | |
152 | + | let checkLPToken = getStringValue(this, ("LP_" + EnterAssetID)) | |
153 | 153 | if ((checkLPToken == ("LP_" + EnterAssetID))) | |
154 | 154 | then throw((("LP_" + EnterAssetID) + " already Exist in our List. You can't generate another LP Token against it.")) | |
155 | 155 | else [LPissue, StringEntry(("LP_" + EnterAssetID), toBase58String(LPid))] | |
156 | 156 | } | |
157 | 157 | ||
158 | 158 | ||
159 | 159 | ||
160 | 160 | @Callable(i) | |
161 | 161 | func WithdrawVotedTokens (EnterAssetID) = { | |
162 | 162 | let pmt = i.payments[0] | |
163 | 163 | let calleraddress = toBase58String(i.caller.bytes) | |
164 | 164 | let BalletAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y' | |
165 | 165 | let checkprojectexpireheight = getIntegerValue(this, ("Voting_End_Height_" + EnterAssetID)) | |
166 | 166 | let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID)) | |
167 | 167 | let checkuservotingbalance = getIntegerValue(this, ((("Votes_Received_" + calleraddress) + "_") + EnterAssetID)) | |
168 | 168 | let pendingblocksforprojectexpire = (checkprojectexpireheight - height) | |
169 | 169 | if ((checkpairisavailableornot != EnterAssetID)) | |
170 | 170 | then throw("Pair is not available in Voting List.") | |
171 | 171 | else if ((checkprojectexpireheight > height)) | |
172 | 172 | then throw((("Voting Already Running. You can withdraw your Ballet Token only after the expire of " + toString(pendingblocksforprojectexpire)) + " Blocks")) | |
173 | 173 | else if ((0 >= checkuservotingbalance)) | |
174 | 174 | then throw("You don't have any dues of ballet balance in this Voting Pair.") | |
175 | 175 | else if (isDefined(pmt.assetId)) | |
176 | 176 | then throw("Don't attach any other asset. Please attach 0.1 TN as a fee to release your token") | |
177 | 177 | else if ((pmt.amount != 10000000)) | |
178 | 178 | then throw("Please attach 0.1 TN as a fee to release your token.") | |
179 | 179 | else [IntegerEntry(((("Votes_Received_" + calleraddress) + "_") + EnterAssetID), 0), ScriptTransfer(i.caller, checkuservotingbalance, BalletAssetID)] | |
180 | 180 | } | |
181 | 181 | ||
182 | 182 | ||
183 | 183 | ||
184 | 184 | @Callable(i) | |
185 | 185 | func SwapAssetToUSDTPairEntry (EnterAssetID) = { | |
186 | 186 | let calleraddress = toBase58String(i.caller.bytes) | |
187 | 187 | let pmt = if ((size(i.payments) == 1)) | |
188 | 188 | then i.payments[0] | |
189 | 189 | else throw("Whitelisted Swap Token is required as Attached payment[1].") | |
190 | 190 | let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H' | |
191 | 191 | let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID)) | |
192 | 192 | let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID)) | |
193 | 193 | let CheckPairPrice = getIntegerValue(this, ("Price_Of_" + EnterAssetID)) | |
194 | 194 | let CheckOldBalanceAssettoUSDT = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) | |
195 | 195 | let CheckOldBalanceUSDTtoAsset = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) | |
196 | 196 | let CheckAssetDecimals = getIntegerValue(this, ("Decimals_of_" + EnterAssetID)) | |
197 | 197 | let CurrentVotingStatus = "Fail" | |
198 | 198 | let SwapFee = 1 | |
199 | 199 | let SwapFeeAddress = addressFromPublicKey(base58'GKmJ6BchUgQfwKp4mp5eX8Y9xLioYRm6e1gDfFgdAcCr') | |
200 | 200 | let amountAssetDecimals = CheckAssetDecimals | |
201 | 201 | let priceAssetDecimals = 6 | |
202 | 202 | let decimalsgap = ((6 - amountAssetDecimals) - 8) | |
203 | 203 | let quantityofpriceasset = (((pmt.amount * CheckPairPrice) * pow(10, 0, decimalsgap, 0, 0, UP)) / pow(10, 0, amountAssetDecimals, 0, 0, UP)) | |
204 | 204 | let userbalancetoreceive = ((quantityofpriceasset * 99) / 100) | |
205 | 205 | let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 100) | |
206 | 206 | let SumupofAssetToUSDTSwapFee = match getInteger(this, ("Total_Swap_Fee_Collected_" + toBase58String(USDTAssetID))) { | |
207 | 207 | case a: Int => | |
208 | 208 | a | |
209 | 209 | case _ => | |
210 | 210 | 0 | |
211 | 211 | } | |
212 | 212 | let NewSumupofAssetToUSDTSwapFee = (SumupofAssetToUSDTSwapFee + SwapFeetoreceive) | |
213 | 213 | let SumupAssetBalance = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) { | |
214 | 214 | case a: Int => | |
215 | 215 | a | |
216 | 216 | case _ => | |
217 | 217 | 0 | |
218 | 218 | } | |
219 | 219 | let NewSumupofAssetBalance = (CheckOldBalanceUSDTtoAsset + pmt.amount) | |
220 | 220 | let SumupUSDTBalance = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) { | |
221 | 221 | case a: Int => | |
222 | 222 | a | |
223 | 223 | case _ => | |
224 | 224 | 0 | |
225 | 225 | } | |
226 | 226 | let NewSumupofUSDTBalance = (CheckOldBalanceAssettoUSDT - quantityofpriceasset) | |
227 | 227 | let SumupofSwapTxns = match getInteger(this, "Total_of_Swaps_Txns") { | |
228 | 228 | case a: Int => | |
229 | 229 | a | |
230 | 230 | case _ => | |
231 | 231 | 0 | |
232 | 232 | } | |
233 | 233 | let NewSumupofSwapTxns = (SumupofSwapTxns + 1) | |
234 | 234 | if ((checkpairisavailableornot != EnterAssetID)) | |
235 | 235 | then throw("Pair is not available in Whitelisted Asset.") | |
236 | 236 | else if ((VotingStatus == CurrentVotingStatus)) | |
237 | 237 | then throw((EnterAssetID + " is not A Whitelisted Token Yet.")) | |
238 | 238 | else if ((pmt.assetId == USDTAssetID)) | |
239 | 239 | then throw("You can't Attach USDT as an Attached Payment. Only Whitelisted Tokens are accepted.") | |
240 | 240 | else if ((pmt.assetId != fromBase58String(EnterAssetID))) | |
241 | 241 | then throw(("Incorrect asset attached, please attach or send " + EnterAssetID)) | |
242 | 242 | else if ((10000 > quantityofpriceasset)) | |
243 | 243 | then throw((("Your Attached Asset Amount is very low. Attach More " + EnterAssetID) + " Tokens to Claim the minimum Amount of 1 cent atleast.")) | |
244 | 244 | else if ((CheckOldBalanceAssettoUSDT == 0)) | |
245 | 245 | then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.") | |
246 | 246 | else if ((CheckOldBalanceUSDTtoAsset == 0)) | |
247 | 247 | then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.") | |
248 | 248 | else if ((quantityofpriceasset > CheckOldBalanceAssettoUSDT)) | |
249 | 249 | then throw((("Pool Only has a Liquidity of " + toString((CheckOldBalanceAssettoUSDT / pow(10, 0, 6, 0, 0, UP)))) + " USDT. Add Liquidity into Pool.")) | |
250 | 250 | else [IntegerEntry(("Price_Of_" + EnterAssetID), CheckPairPrice), IntegerEntry(("Total_Swap_Fee_Collected_" + toBase58String(USDTAssetID)), NewSumupofAssetToUSDTSwapFee), IntegerEntry("Total_of_Swaps_Txns", NewSumupofSwapTxns), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewSumupofAssetBalance), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewSumupofUSDTBalance), ScriptTransfer(i.caller, userbalancetoreceive, USDTAssetID), ScriptTransfer(SwapFeeAddress, SwapFeetoreceive, USDTAssetID)] | |
251 | 251 | } | |
252 | 252 | ||
253 | 253 | ||
254 | 254 | ||
255 | 255 | @Callable(i) | |
256 | 256 | func SwapUSDTToAssetPairEntry (EnterAssetID) = { | |
257 | 257 | let calleraddress = toBase58String(i.caller.bytes) | |
258 | 258 | let pmt = if ((size(i.payments) == 1)) | |
259 | 259 | then i.payments[0] | |
260 | 260 | else throw("Only USDT Token is required as an Attached payment[1].") | |
261 | 261 | let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H' | |
262 | 262 | let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID)) | |
263 | 263 | let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID)) | |
264 | 264 | let CheckReversePairPrice = getIntegerValue(this, ("ReversePrice_Of_" + EnterAssetID)) | |
265 | 265 | let CheckAssetDecimals = getIntegerValue(this, ("Decimals_of_" + EnterAssetID)) | |
266 | 266 | let CurrentVotingStatus = "Fail" | |
267 | 267 | let ReverseSwapFee = 1 | |
268 | 268 | let amountAssetDecimals = CheckAssetDecimals | |
269 | 269 | let priceAssetDecimals = 6 | |
270 | 270 | let decimalsgap = ((6 - amountAssetDecimals) - 8) | |
271 | 271 | let quantityofpriceasset = ((((pmt.amount * CheckReversePairPrice) / pow(10, 0, 12, 0, 0, UP)) / pow(10, 0, decimalsgap, 0, 0, UP)) * pow(10, 0, amountAssetDecimals, 0, 0, UP)) | |
272 | 272 | let getAssetBalance = assetBalance(this, fromBase58String(EnterAssetID)) | |
273 | 273 | let newAssetBalance = (getAssetBalance - quantityofpriceasset) | |
274 | 274 | if ((checkpairisavailableornot != EnterAssetID)) | |
275 | 275 | then throw("Pair is not available in Whitelisted Asset.") | |
276 | 276 | else if ((VotingStatus == CurrentVotingStatus)) | |
277 | 277 | then throw((EnterAssetID + " is not A Whitelisted Token Yet.")) | |
278 | 278 | else if ((EnterAssetID == toBase58String(USDTAssetID))) | |
279 | 279 | then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input and Attach USDT as an attachment Token in payment[1].") | |
280 | 280 | else if ((pmt.assetId != USDTAssetID)) | |
281 | 281 | then throw("You can Attach USDT as an Attached Payment[1] to Swap USDT To Required Token. Any other asset else than USDT will be rejected.") | |
282 | 282 | else if ((1000000 > pmt.amount)) | |
283 | 283 | then throw("Your Attached USDT Amount is very low. Attach Atleast 1 USDT to Claim the minimum Tokens.") | |
284 | 284 | else [IntegerEntry(("ReversePrice_Of_" + EnterAssetID), CheckReversePairPrice), IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), 0), ScriptTransfer(i.caller, ((quantityofpriceasset * 99) / 100), fromBase58String(EnterAssetID)), ScriptTransfer(i.caller, ((quantityofpriceasset * ReverseSwapFee) / 100), fromBase58String(EnterAssetID))] | |
285 | 285 | } | |
286 | 286 | ||
287 | 287 | ||
288 | 288 | ||
289 | 289 | @Callable(i) | |
290 | 290 | func AddLiquidity (EnterAssetID) = { | |
291 | 291 | let calleraddress = toBase58String(i.caller.bytes) | |
292 | 292 | let pmt1 = value(i.payments[0]) | |
293 | 293 | let pmt2 = value(i.payments[1]) | |
294 | 294 | let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H' | |
295 | 295 | let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID)) | |
296 | 296 | let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID)) | |
297 | 297 | let CheckPairPrice = getIntegerValue(this, ("Price_Of_" + EnterAssetID)) | |
298 | 298 | let CheckReversePairPrice = getIntegerValue(this, ("ReversePrice_Of_" + EnterAssetID)) | |
299 | 299 | let CheckAssetDecimals = getIntegerValue(this, ("Decimals_of_" + EnterAssetID)) | |
300 | 300 | let CurrentVotingStatus = "Fail" | |
301 | 301 | let AddLiquidityFee = 100000 | |
302 | 302 | let amountAssetDecimals = CheckAssetDecimals | |
303 | 303 | let decimalsgap = ((6 - amountAssetDecimals) - 8) | |
304 | 304 | let quantityofEnterAssetID = ((((pmt1.amount * CheckReversePairPrice) / pow(10, 0, 12, 0, 0, UP)) / pow(10, 0, decimalsgap, 0, 0, UP)) * pow(10, 0, amountAssetDecimals, 0, 0, UP)) | |
305 | 305 | let checkpointToVerifyBothPrices = fraction(1, 1000000000000, CheckPairPrice) | |
306 | 306 | let USDTHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) { | |
307 | 307 | case a: Int => | |
308 | 308 | a | |
309 | 309 | case _ => | |
310 | 310 | 0 | |
311 | 311 | } | |
312 | 312 | let NewUSDTHoldingInPair = (USDTHoldingInPair + pmt1.amount) | |
313 | 313 | let AssetHoldingInPair = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) { | |
314 | 314 | case a: Int => | |
315 | 315 | a | |
316 | 316 | case _ => | |
317 | 317 | 0 | |
318 | 318 | } | |
319 | 319 | let NewAssetHoldingInPair = (AssetHoldingInPair + pmt2.amount) | |
320 | 320 | if ((checkpairisavailableornot != EnterAssetID)) | |
321 | 321 | then throw("Pair is not available in Whitelisted Asset.") | |
322 | 322 | else if ((VotingStatus == CurrentVotingStatus)) | |
323 | 323 | then throw((EnterAssetID + " is not A Whitelisted Token Yet.")) | |
324 | 324 | else if ((EnterAssetID == toBase58String(USDTAssetID))) | |
325 | 325 | then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input as well as in payment[1] and Attach USDT as an attachment Token in payment[2].") | |
326 | 326 | else if ((size(i.payments) != 2)) | |
327 | 327 | then throw("Two attached assets expected as payment in 50%-50%. Kindly Attach payment1 = USDT Token and payment2 = Token you want to add for Liquidity.") | |
328 | 328 | else if ((pmt1.assetId != USDTAssetID)) | |
329 | 329 | then throw("Incorrect asset attached for Liquidity in payment[1], please attach USDT Token only.") | |
330 | 330 | else if ((10000000 > pmt1.amount)) | |
331 | 331 | then throw("please attach atleast 10 USDT in payment[1].") | |
332 | 332 | else if ((pmt2.assetId == USDTAssetID)) | |
333 | 333 | then throw("You Attached USDT asset for Liquidity in both payments, Kindly Attach payment1 = USDT Token and payment2 = Token you want to add for Liquidity.") | |
334 | 334 | else if ((pmt2.assetId != fromBase58String(EnterAssetID))) | |
335 | 335 | then throw((("Asset String " + EnterAssetID) + " is not matching with attached payment[2]. String and payment[2] must be same.")) | |
336 | 336 | else if ((pmt2.amount != quantityofEnterAssetID)) | |
337 | 337 | then throw(("Attached payment[2] quantity is not matching as per attached payment[1] USDT.It must be " + toString(quantityofEnterAssetID))) | |
338 | 338 | else if ((CheckReversePairPrice != checkpointToVerifyBothPrices)) | |
339 | 339 | then throw("Price and Reverse Price are Mismatched or manipulated manually.") | |
340 | 340 | else [IntegerEntry(("Price_Of_" + EnterAssetID), CheckPairPrice), IntegerEntry(("ReversePrice_Of_" + EnterAssetID), CheckReversePairPrice), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewUSDTHoldingInPair), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewAssetHoldingInPair)] | |
341 | 341 | } | |
342 | 342 | ||
343 | 343 | ||
344 | 344 | ||
345 | 345 | @Callable(i) | |
346 | 346 | func RemovePairEntry (EnterAssetID) = { | |
347 | 347 | let adminrights = getStringValue(this, "Polarity_Admin_Rights") | |
348 | 348 | let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H' | |
349 | 349 | let checkprojectexpireheight = getIntegerValue(this, ("Voting_End_Height_" + EnterAssetID)) | |
350 | 350 | let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID)) | |
351 | 351 | let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID)) | |
352 | 352 | let NewVotingStatus = "Pass" | |
353 | 353 | let calleraddress = toBase58String(i.caller.bytes) | |
354 | 354 | let currentheight = height | |
355 | 355 | let pendingblocksforprojectexpire = (checkprojectexpireheight - height) | |
356 | 356 | if ((checkpairisavailableornot != EnterAssetID)) | |
357 | 357 | then throw("Pair is not available in Voting List.") | |
358 | 358 | else if ((adminrights != calleraddress)) | |
359 | 359 | then throw((("I know You are not An Admin. Only " + adminrights) + " has rights to remove the pair.")) | |
360 | 360 | else if ((checkprojectexpireheight > height)) | |
361 | 361 | then throw((("Voting Already Running. You can remove the pair after " + toString(pendingblocksforprojectexpire)) + " Blocks")) | |
362 | 362 | else if ((VotingStatus == NewVotingStatus)) | |
363 | 363 | then throw((EnterAssetID + " is now Whitelisted. So you can't remove it.")) | |
364 | 364 | else [DeleteEntry(("Pair_Under_Voting_" + EnterAssetID)), DeleteEntry(("Voting_Start_Height_" + EnterAssetID)), DeleteEntry(("Voting_End_Height_" + EnterAssetID)), DeleteEntry(("Voting_Period_" + EnterAssetID)), DeleteEntry(("Votes_Required_" + EnterAssetID)), DeleteEntry(("Voting_Listing_Fee_" + EnterAssetID)), DeleteEntry(("Voting_Status_" + EnterAssetID)), DeleteEntry(("Votes_Received_" + EnterAssetID)), DeleteEntry(("Price_Of_" + EnterAssetID)), DeleteEntry(("ReversePrice_Of_" + EnterAssetID))] | |
365 | 365 | } | |
366 | 366 | ||
367 | 367 | ||
368 | 368 | ||
369 | 369 | @Callable(i) | |
370 | 370 | func RemoveEntry (Key,Key1,Key2,Key3) = [DeleteEntry(Key), DeleteEntry(Key1), DeleteEntry(Key2), DeleteEntry(Key3)] | |
371 | 371 | ||
372 | 372 | ||
373 | 373 | @Verifier(tx) | |
374 | 374 | func verify () = match tx { | |
375 | 375 | case _ => | |
376 | 376 | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
377 | 377 | } | |
378 | 378 |
github/deemru/w8io/169f3d6 69.97 ms ◑