tx · EgnuyitmW1DyweCV2AJdriN64MuiVR9aEUC2C6rL3BVd

3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv:  -0.01400000 Waves

2021.08.26 12:58 [1675161] smart account 3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv > SELF 0.00000000 Waves

{ "type": 13, "id": "EgnuyitmW1DyweCV2AJdriN64MuiVR9aEUC2C6rL3BVd", "fee": 1400000, "feeAssetId": null, "timestamp": 1629971977226, "version": 2, "chainId": 84, "sender": "3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv", "senderPublicKey": "28sGn7FYnmxceAmnGYiDiKuMK1QyXiqX8zQXfKDnrc8t", "proofs": [ "VsEdLMDdfAeHcg8pErdY5Fa6iPPKHi6yKxy9pFYYw5bbcBp4BCVP6vaASyLEFF9Z8jKiXZcANsuQQ21Cdy9sAsT" ], "script": "base64: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IFswLjAxIC0gMU1dIFVTRFQuAwkAAGYAAAACBQAAAAxMaXN0aW5nUHJpY2UAAAAA6NSlD/8JAAACAAAAAQIAAABrSGlnaGVyIGxpc3RpbmcgUHJpY2UgaXMgRW50ZXJlZCBwZXIgdG9rZW4sIHBsZWFzZSBlbnRlciBhcyBhIHZhbGlkIHJhbmdlIGluIGJldHdlZW4gcmFuZ2UgWzAuMDEgLSAxTV0gVVNEVC4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACAgAAABJQYWlyX1VuZGVyX1ZvdGluZ18FAAAACEFzc2V0SUQxBQAAAAhBc3NldElEMQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAICAAAADlZvdGluZ19TdGF0dXNfBQAAAAhBc3NldElEMQUAAAAMdm90aW5nc3RhdHVzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAFFZvdGluZ19TdGFydF9IZWlnaHRfBQAAAAhBc3NldElEMQUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAElZvdGluZ19FbmRfSGVpZ2h0XwUAAAAIQXNzZXRJRDEFAAAADHZvdGluZ0V4cGlyZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAA5Wb3RpbmdfUGVyaW9kXwUAAAAIQXNzZXRJRDEFAAAADk5vT2ZEYXlzQmxvY2tzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAE1ZvdGluZ19MaXN0aW5nX0ZlZV8FAAAACEFzc2V0SUQxCAUAAAAEcG10MQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAPVm90ZXNfUmVxdWlyZWRfBQAAAAhBc3NldElEMQUAAAANdm90ZXNyZXF1aXJlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAA9Wb3Rlc19SZWNlaXZlZF8FAAAACEFzc2V0SUQxAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAACVByaWNlX09mXwUAAAAIQXNzZXRJRDEFAAAADExpc3RpbmdQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABBSZXZlcnNlUHJpY2VfT2ZfBQAAAAhBc3NldElEMQUAAAAMcmV2ZXJzZXByaWNlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAACkZlZUFkZHJlc3MIBQAAAARwbXQxAAAABmFtb3VudAUAAAANQmFsbGV0QXNzZXRJRAUAAAADbmlsAAAAAWkBAAAAC0lzc3VlQmFsbGV0AAAAAAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAApjdXJyZW50S2V5CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADUJhbGxldEFzc2V0SUQBAAAAIC1vWwG5neVKbxqEaKeT7hMXlhgC7/FEdjB7WHX3k6igBAAAAA5QcmljZVBlckJhbGxldAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAJQkFMTEVUL1ROBAAAAA9OZXdCYWxsZXRUb1VzZXIJAABrAAAAAwAAAAAAAAGGoAgFAAAAA3BtdAAAAAZhbW91bnQFAAAADlByaWNlUGVyQmFsbGV0BAAAABRQcmV2aW91c0lzc3VlZEJhbGxldAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAUVG90YWxfSXNzdWVkX0JhbGxldDoEAAAAEVRvdGFsSXNzdWVkQmFsbGV0CQAAZAAAAAIFAAAAFFByZXZpb3VzSXNzdWVkQmFsbGV0BQAAAA9OZXdCYWxsZXRUb1VzZXIEAAAAGlByZXZpb3VzQmFsbGV0UmVzZXJ2ZVZhbHVlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAABtUb3RhbF9CYWxsZXRfUmVzZXJ2ZV9Jbl9UTjoEAAAAEkJhbGxldFJlc2VydmVWYWx1ZQkAAGQAAAACBQAAABpQcmV2aW91c0JhbGxldFJlc2VydmVWYWx1ZQgFAAAAA3BtdAAAAAZhbW91bnQEAAAAGVByZXZpb3VzQmFsbGV0QmFja3VwUHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMCAAAAGkJhbGxldF9CYWNrdXBfVmFsdWVfSW5fVE46BAAAABFCYWxsZXRCYWNrdXBQcmljZQkAAGsAAAADAAAAAAAAAYagBQAAABJCYWxsZXRSZXNlcnZlVmFsdWUFAAAAEVRvdGFsSXNzdWVkQmFsbGV0BAAAAApGZWVBZGRyZXNzAQAAACDjrdey1Io21qI8AxObYBZMNWPHMCK947HpXHsKae68IwQAAAANRmVlUGVyY2VudGFnZQAAAAAAAAAAAQQAAAAbQmFsYW5jZVRva2Vuc1JldHVybmVkVG9Vc2VyCQAAZQAAAAIAAAAAAAAAAGQFAAAADUZlZVBlcmNlbnRhZ2UDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAK0luY29ycmVjdCBhc3NldCBhdHRhY2hlZCwgcGxlYXNlIGF0dGFjaCBUTi4DCQAAZgAAAAIAAAAAAABMS0AIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAANFBsZWFzZSBBdHRhY2ggbWluaW11bSAwLjA1IFROIFRvIElzc3VlIEJhbGxldCBBc3NldC4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAFFRvdGFsX0lzc3VlZF9CYWxsZXQ6BQAAABFUb3RhbElzc3VlZEJhbGxldAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAbVG90YWxfQmFsbGV0X1Jlc2VydmVfSW5fVE46BQAAABJCYWxsZXRSZXNlcnZlVmFsdWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGkJhbGxldF9CYWNrdXBfVmFsdWVfSW5fVE46BQAAABFCYWxsZXRCYWNrdXBQcmljZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAAdtZXNzYWdlAgAAACg8aDE+QmFsbGV0IElzc3VlZCBTdWNjZXNzZnVsbHkhPC9oMT48YnI+CQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAANQmFsbGV0QXNzZXRJRAUAAAAPTmV3QmFsbGV0VG9Vc2VyBgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIJAABpAAAAAgkAAGgAAAACBQAAAA9OZXdCYWxsZXRUb1VzZXIFAAAAG0JhbGFuY2VUb2tlbnNSZXR1cm5lZFRvVXNlcgAAAAAAAAAAZAUAAAANQmFsbGV0QXNzZXRJRAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAApGZWVBZGRyZXNzCQAAaQAAAAIJAABoAAAAAgUAAAAPTmV3QmFsbGV0VG9Vc2VyBQAAAA1GZWVQZXJjZW50YWdlAAAAAAAAAABkBQAAAA1CYWxsZXRBc3NldElEBQAAAANuaWwAAAABaQEAAAAJTGlxdWlkYXRlAAAAAAQAAAAKY3VycmVudEtleQkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAANQmFsbGV0QXNzZXRJRAEAAAAgLW9bAbmd5UpvGoRop5PuExeWGALv8UR2MHtYdfeTqKAEAAAAFFByZXZpb3VzSXNzdWVkQmFsbGV0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAABRUb3RhbF9Jc3N1ZWRfQmFsbGV0OgQAAAARVG90YWxJc3N1ZWRCYWxsZXQJAABlAAAAAgUAAAAUUHJldmlvdXNJc3N1ZWRCYWxsZXQIBQAAAANwbXQAAAAGYW1vdW50BAAAABpQcmV2aW91c0JhbGxldFJlc2VydmVWYWx1ZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAbVG90YWxfQmFsbGV0X1Jlc2VydmVfSW5fVE46BAAAABlQcmV2aW91c0JhbGxldEJhY2t1cFByaWNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAABpCYWxsZXRfQmFja3VwX1ZhbHVlX0luX1ROOgQAAAASY2FsY3VsYXRlYnVybnZhbHVlCQAAawAAAAMFAAAAGVByZXZpb3VzQmFsbGV0QmFja3VwUHJpY2UIBQAAAANwbXQAAAAGYW1vdW50AAAAAAAAAYagBAAAABJCYWxsZXRSZXNlcnZlVmFsdWUJAABlAAAAAgUAAAAaUHJldmlvdXNCYWxsZXRSZXNlcnZlVmFsdWUFAAAAEmNhbGN1bGF0ZWJ1cm52YWx1ZQQAAAARQmFsbGV0QmFja3VwUHJpY2UJAABrAAAAAwAAAAAAAAGGoAUAAAASQmFsbGV0UmVzZXJ2ZVZhbHVlBQAAABFUb3RhbElzc3VlZEJhbGxldAMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAANQmFsbGV0QXNzZXRJRAkAAAIAAAABAgAAAEpLaW5kbHkgRGVwb3NpdCBPbmx5IDQ0TXE4S3FVaE05NHQ5M01pQnEzUzIyaWl1R2N6TXhwS21zZTVkQnkydzV5IChCYWxsZXQpLgMJAABmAAAAAgAAAAAAAAGGoAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQIAAAAwQXR0YWNoIEFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAwMSBCYWxsZXQuCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAANQmFsbGV0QXNzZXRJRAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAFFRvdGFsX0lzc3VlZF9CYWxsZXQ6BQAAABFUb3RhbElzc3VlZEJhbGxldAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAbVG90YWxfQmFsbGV0X1Jlc2VydmVfSW5fVE46BQAAABJCYWxsZXRSZXNlcnZlVmFsdWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGkJhbGxldF9CYWNrdXBfVmFsdWVfSW5fVE46BQAAABFCYWxsZXRCYWNrdXBQcmljZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAAdtZXNzYWdlAgAAACw8aDE+QmFsbGV0IExpcXVpZGF0ZWQgU3VjY2Vzc2Z1bGx5ITwvaDE+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AAASVm90aW5nX0VuZF9IZWlnaHRfBQAAAAxFbnRlckFzc2V0SUQEAAAAGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABJQYWlyX1VuZGVyX1ZvdGluZ18FAAAADEVudGVyQXNzZXRJRAQAAAAWY2hlY2t1c2Vydm90aW5nYmFsYW5jZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAPVm90ZXNfUmVjZWl2ZWRfBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQEAAAAHXBlbmRpbmdibG9ja3Nmb3Jwcm9qZWN0ZXhwaXJlCQAAZQAAAAIFAAAAGGNoZWNrcHJvamVjdGV4cGlyZWhlaWdodAUAAAAGaGVpZ2h0AwkBAAAAAiE9AAAAAgUAAAAZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAUAAAAMRW50ZXJBc3NldElECQAAAgAAAAECAAAAJVBhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBWb3RpbmcgTGlzdC4DCQAAZgAAAAIFAAAAGGNoZWNrcHJvamVjdGV4cGlyZWhlaWdodAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAFRWb3RpbmcgQWxyZWFkeSBSdW5uaW5nLiBZb3UgY2FuIHdpdGhkcmF3IHlvdXIgQmFsbGV0IFRva2VuIG9ubHkgYWZ0ZXIgdGhlIGV4cGlyZSBvZiAJAAGkAAAAAQUAAAAdcGVuZGluZ2Jsb2Nrc2ZvcnByb2plY3RleHBpcmUCAAAAByBCbG9ja3MDCQAAZwAAAAIAAAAAAAAAAAAFAAAAFmNoZWNrdXNlcnZvdGluZ2JhbGFuY2UJAAACAAAAAQIAAAA+WW91IGRvbid0IGhhdmUgYW55IGR1ZXMgb2YgYmFsbGV0IGJhbGFuY2UgaW4gdGhpcyBWb3RpbmcgUGFpci4DCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAUURvbid0IGF0dGFjaCBhbnkgb3RoZXIgYXNzZXQuIFBsZWFzZSBhdHRhY2ggMC4xIFROIGFzIGEgZmVlIHRvIHJlbGVhc2UgeW91ciB0b2tlbgMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAGYW1vdW50AAAAAAAAmJaACQAAAgAAAAECAAAANFBsZWFzZSBhdHRhY2ggMC4xIFROIGFzIGEgZmVlIHRvIHJlbGVhc2UgeW91ciB0b2tlbi4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAD1ZvdGVzX1JlY2VpdmVkXwUAAAANY2FsbGVyYWRkcmVzcwIAAAABXwUAAAAMRW50ZXJBc3NldElEAAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAWY2hlY2t1c2Vydm90aW5nYmFsYW5jZQUAAAANQmFsbGV0QXNzZXRJRAUAAAADbmlsAAAAAWkBAAAAGFN3YXBBc3NldFRvVVNEVFBhaXJFbnRyeQAAAAEAAAAMRW50ZXJBc3NldElEBAAAAA1jYWxsZXJhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAA3BtdAMJAAAAAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAADpXaGl0ZWxpc3RlZCBTd2FwIFRva2VuIGlzIHJlcXVpcmVkIGFzIEF0dGFjaGVkIHBheW1lbnRbMV0uBAAAAAtVU0RUQXNzZXRJRAEAAAAgCGWEtw/wimoa8+Jo6C4IkCTD0ydYA80s9i5eC9/aFaQEAAAAGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABJQYWlyX1VuZGVyX1ZvdGluZ18FAAAADEVudGVyQXNzZXRJRAQAAAAMVm90aW5nU3RhdHVzCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAICAAAADlZvdGluZ19TdGF0dXNfBQAAAAxFbnRlckFzc2V0SUQEAAAAEENoZWNrVVNEVEJhbGFuY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfBQAAAAxFbnRlckFzc2V0SUQCAAAAAV8JAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQEAAAAEUNoZWNrQXNzZXRCYWxhbmNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtCYWxhbmNlX29mXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAIAAAABXwUAAAAMRW50ZXJBc3NldElEBAAAABBuZXdiYWxhbmNlb2ZVU0RUCQAAawAAAAMFAAAAEENoZWNrVVNEVEJhbGFuY2UFAAAAEUNoZWNrQXNzZXRCYWxhbmNlCQAAZAAAAAIFAAAAEUNoZWNrQXNzZXRCYWxhbmNlCAUAAAADcG10AAAABmFtb3VudAQAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQJAABlAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQUAAAAQbmV3YmFsYW5jZW9mVVNEVAQAAAATQ3VycmVudFZvdGluZ1N0YXR1cwIAAAAERmFpbAQAAAAHU3dhcEZlZQAAAAAAAAAAAQQAAAAOU3dhcEZlZUFkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEBAAAAIOOt17LUijbWojwDE5tgFkw1Y8cwIr3jselcewpp7rwjBAAAABBTd2FwRmVldG9yZWNlaXZlCQAAaQAAAAIJAABoAAAAAgUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQFAAAAB1N3YXBGZWUAAAAAAAAAAGQEAAAAFHVzZXJiYWxhbmNldG9yZWNlaXZlCQAAZQAAAAIFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0BQAAABBTd2FwRmVldG9yZWNlaXZlBAAAABlTdW11cG9mQXNzZXRUb1VTRFRTd2FwRmVlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAZVG90YWxfU3dhcF9GZWVfQ29sbGVjdGVkXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABxOZXdTdW11cG9mQXNzZXRUb1VTRFRTd2FwRmVlCQAAZAAAAAIFAAAAGVN1bXVwb2ZBc3NldFRvVVNEVFN3YXBGZWUFAAAAEFN3YXBGZWV0b3JlY2VpdmUEAAAAEVN1bXVwQXNzZXRCYWxhbmNlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAWTmV3U3VtdXBvZkFzc2V0QmFsYW5jZQkAAGQAAAACBQAAABFDaGVja0Fzc2V0QmFsYW5jZQgFAAAAA3BtdAAAAAZhbW91bnQEAAAAEFN1bXVwVVNEVEJhbGFuY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABVOZXdTdW11cG9mVVNEVEJhbGFuY2UJAABlAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQEAAAAD1N1bXVwb2ZTd2FwVHhucwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzAgAAABNUb3RhbF9vZl9Td2Fwc19UeG5zAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAEk5ld1N1bXVwb2ZTd2FwVHhucwkAAGQAAAACBQAAAA9TdW11cG9mU3dhcFR4bnMAAAAAAAAAAAEDCQEAAAACIT0AAAACBQAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAAArUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFdoaXRlbGlzdGVkIEFzc2V0LgMJAAAAAAAAAgUAAAAMVm90aW5nU3RhdHVzBQAAABNDdXJyZW50Vm90aW5nU3RhdHVzCQAAAgAAAAEJAAEsAAAAAgUAAAAMRW50ZXJBc3NldElEAgAAACAgaXMgbm90IEEgV2hpdGVsaXN0ZWQgVG9rZW4gWWV0LgMJAAAAAAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAFNZb3UgY2FuJ3QgQXR0YWNoIFVTRFQgYXMgYW4gQXR0YWNoZWQgUGF5bWVudC4gT25seSBXaGl0ZWxpc3RlZCBUb2tlbnMgYXJlIGFjY2VwdGVkLgMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQkAASwAAAACAgAAADBJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQsIHBsZWFzZSBhdHRhY2ggb3Igc2VuZCAFAAAADEVudGVyQXNzZXRJRAMJAABmAAAAAgAAAAAAAAAnEAUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAANFlvdXIgQXR0YWNoZWQgQXNzZXQgQW1vdW50IGlzIHZlcnkgbG93LiBBdHRhY2ggTW9yZSAFAAAADEVudGVyQXNzZXRJRAIAAAA2IFRva2VucyB0byBDbGFpbSB0aGUgbWluaW11bSBBbW91bnQgb2YgMSBjZW50IGF0bGVhc3QuAwkAAAAAAAACBQAAABBDaGVja1VTRFRCYWxhbmNlAAAAAAAAAAAACQAAAgAAAAECAAAAZVN3YXAgUGFpciBOZWVkIHRvIEFkZCBMaXF1aWRpdHkgZmlyc3QgaW50byBQb29sLiBPbmx5IEFmdGVyIHRoYXQgUGFpciB3aWxsIGJlIGFjdGl2YXRlZCBmb3IgU3dhcHBpbmcuAwkAAAAAAAACBQAAABFDaGVja0Fzc2V0QmFs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AABlAAAAAgUAAAARQ2hlY2tBc3NldEJhbGFuY2UFAAAAEW5ld2JhbGFuY2VvZkFzc2V0BAAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90CQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAASUGFpcl9VbmRlcl9Wb3RpbmdfBQAAAAxFbnRlckFzc2V0SUQEAAAADFZvdGluZ1N0YXR1cwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAA5Wb3RpbmdfU3RhdHVzXwUAAAAMRW50ZXJBc3NldElEBAAAABNDdXJyZW50Vm90aW5nU3RhdHVzAgAAAARGYWlsBAAAAAdTd2FwRmVlAAAAAAAAAAABBAAAABBTd2FwRmVldG9yZWNlaXZlCQAAaQAAAAIJAABoAAAAAgUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQFAAAAB1N3YXBGZWUAAAAAAAAAAGQEAAAAFHVzZXJiYWxhbmNldG9yZWNlaXZlCQAAZQAAAAIFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0BQAAABBTd2FwRmVldG9yZWNlaXZlAwkBAAAAAiE9AAAAAgUAAAAZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAUAAAAMRW50ZXJBc3NldElECQAAAgAAAAECAAAAK1BhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBXaGl0ZWxpc3RlZCBBc3NldC4DCQAAAAAAAAIFAAAADFZvdGluZ1N0YXR1cwUAAAATQ3VycmVudFZvdGluZ1N0YXR1cwkAAAIAAAABCQABLAAAAAIFAAAADEVudGVyQXNzZXRJRAIAAAAgIGlzIG5vdCBBIFdoaXRlbGlzdGVkIFRva2VuIFlldC4DCQAAAAAAAAIFAAAADEVudGVyQXNzZXRJRAkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAHtJbnB1dCBjYW4gTmV2ZXIgYmUgYSBVU0RUIEFzc2V0SUQuIEVudGVyIFdoaXRlbGlzdGVkIEFzc2V0SUQgaW4gaW5wdXQgYW5kIEF0dGFjaCBVU0RUIGFzIGFuIGF0dGFjaG1lbnQgVG9rZW4gaW4gcGF5bWVudFsxXS4DCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAC1VTRFRBc3NldElECQAAAgAAAAECAAAAfllvdSBjYW4gQXR0YWNoIFVTRFQgYXMgYW4gQXR0YWNoZWQgUGF5bWVudFsxXSB0byBTd2FwIFVTRFQgVG8gUmVxdWlyZWQgVG9rZW4uIEFueSBvdGhlciBhc3NldCBlbHNlIHRoYW4gVVNEVCB3aWxsIGJlIHJlamVjdGVkLgMJAABmAAAAAgAAAAAAAA9CQAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQIAAABZWW91ciBBdHRhY2hlZCBVU0RUIEFtb3VudCBpcyB2ZXJ5IGxvdy4gQXR0YWNoIEF0bGVhc3QgMSBVU0RUIHRvIENsYWltIHRoZSBtaW5pbXVtIFRva2Vucy4DCQAAAAAAAAIFAAAAEENoZWNrVVNEVEJhbGFuY2UAAAAAAAAAAAAJAAACAAAAAQIAAABlU3dhcCBQYWlyIE5lZWQgdG8gQWRkIExpcXVpZGl0eSBmaXJzdCBpbnRvIFBvb2wuIE9ubHkgQWZ0ZXIgdGhhdCBQYWlyIHdpbGwgYmUgYWN0aXZhdGVkIGZvciBTd2FwcGluZy4DCQAAAAAAAAIFAAAAEUNoZWNrQXNzZXRCYWxhbmNlAAAAAAAAAAAACQAAAgAAAAECAAAAZVN3YXAgUGFpciBOZWVkIHRvIEFkZCBMaXF1aWRpdHkgZmlyc3QgaW50byBQb29sLiBPbmx5IEFmdGVyIHRoYXQgUGFpciB3aWxsIGJlIGFjdGl2YXRlZCBmb3IgU3dhcHBpbmcuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAGVRvdGFsX1N3YXBfRmVlX0NvbGxlY3RlZF8FAAAADEVudGVyQXNzZXRJRAAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAFHVzZXJiYWxhbmNldG9yZWNlaXZlCQACWQAAAAEFAAAADEVudGVyQXNzZXRJRAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAEFN3YXBGZWV0b3JlY2VpdmUJAAJZAAAAAQUAAAAMRW50ZXJBc3NldElEBQAAAANuaWwAAAABaQEAAAAMQWRkTGlxdWlkaXR5AAAAAQAAAAxFbnRlckFzc2V0SUQEAAAADWNhbGxlcmFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAEcG10MQkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAEcG10MgkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQQAAAALVVNEVEFzc2V0SUQBAAAAIAhlhLcP8IpqGvPiaOguCJAkw9MnWAPNLPYuXgvf2hWkBAAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90CQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAASUGFpcl9VbmRlcl9Wb3RpbmdfBQAAAAxFbnRlckFzc2V0SUQEAAAADFZvdGluZ1N0YXR1cwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAA5Wb3RpbmdfU3RhdHVzXwUAAAAMRW50ZXJBc3NldElEBAAAAA5DaGVja1BhaXJQcmljZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAAlQcmljZV9PZl8FAAAADEVudGVyQXNzZXRJRAQAAAAVQ2hlY2tSZXZlcnNlUGFpclByaWNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAICAAAAEFJldmVyc2VQcmljZV9PZl8FAAAADEVudGVyQXNzZXRJRAQAAAASQ2hlY2tBc3NldERlY2ltYWxzCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAICAAAADERlY2ltYWxzX29mXwUAAAAMRW50ZXJBc3NldElEBAAAABNDdXJyZW50Vm90aW5nU3RhdHVzAgAAAARGYWlsBAAAAA9BZGRMaXF1aWRpdHlGZWUAAAAAAAABhqAEAAAAE2Ftb3VudEFzc2V0RGVjaW1hbHMFAAAAEkNoZWNrQXNzZXREZWNpbWFscwQAAAALZGVjaW1hbHNnYXAJAABlAAAAAgkAAGUAAAACAAAAAAAAAAAGBQAAABNhbW91bnRBc3NldERlY2ltYWxzAAAAAAAAAAAIBAAAABZxdWFudGl0eW9mRW50ZXJBc3NldElECQAAaAAAAAIJAABpAAAAAgkAAGkAAAACCQAAaAAAAAIIBQAAAARwbXQxAAAABmFtb3VudAUAAAAVQ2hlY2tSZXZlcnNlUGFpclByaWNlCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAlVQCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAFAAAAC2RlY2ltYWxzZ2FwAAAAAAAAAAAAAAAAAAAAAAAABQAAAAJVUAkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAABNhbW91bnRBc3NldERlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAAJVUAQAAAAcY2hlY2twb2ludFRvVmVyaWZ5Qm90aFByaWNlcwkAAGsAAAADAAAAAAAAAAABAAAAAOjUpRAABQAAAA5DaGVja1BhaXJQcmljZQQAAAARVVNEVEhvbGRpbmdJblBhaXIEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABROZXdVU0RUSG9sZGluZ0luUGFpcgkAAGQAAAACBQAAABFVU0RUSG9sZGluZ0luUGFpcggFAAAABHBtdDEAAAAGYW1vdW50BAAAABJBc3NldEhvbGRpbmdJblBhaXIEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8JAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQCAAAAAV8FAAAADEVudGVyQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABVOZXdBc3NldEhvbGRpbmdJblBhaXIJAABkAAAAAgUAAAASQXNzZXRIb2xkaW5nSW5QYWlyCAUAAAAEcG10MgAAAAZhbW91bnQDCQEAAAACIT0AAAACBQAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAAArUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFdoaXRlbGlzdGVkIEFzc2V0LgMJAAAAAAAAAgUAAAAMVm90aW5nU3RhdHVzBQAAABNDdXJyZW50Vm90aW5nU3RhdHVzCQAAAgAAAAEJAAEsAAAAAgUAAAAMRW50ZXJBc3NldElEAgAAACAgaXMgbm90IEEgV2hpdGVsaXN0ZWQgVG9rZW4gWWV0LgMJAAAAAAAAAgUAAAAMRW50ZXJBc3NldElECQACWAAAAAEFAAAAC1VTRFRBc3NldElECQAAAgAAAAECAAAAlElucHV0IGNhbiBOZXZlciBiZSBhIFVTRFQgQXNzZXRJRC4gRW50ZXIgV2hpdGVsaXN0ZWQgQXNzZXRJRCBpbiBpbnB1dCBhcyB3ZWxsIGFzIGluIHBheW1lbnRbMV0gYW5kIEF0dGFjaCBVU0RUIGFzIGFuIGF0dGFjaG1lbnQgVG9rZW4gaW4gcGF5bWVudFsyXS4DCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAi1R3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQgYXMgcGF5bWVudCBpbiA1MCUtNTAlLiBLaW5kbHkgQXR0YWNoIHBheW1lbnQxID0gVVNEVCBUb2tlbiBhbmQgcGF5bWVudDIgPSBUb2tlbiB5b3Ugd2FudCB0byBhZGQgZm9yIExpcXVpZGl0eS4DCQEAAAACIT0AAAACCAUAAAAEcG10MQAAAAdhc3NldElkBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAFRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQgZm9yIExpcXVpZGl0eSBpbiBwYXltZW50WzFdLCBwbGVhc2UgYXR0YWNoIFVTRFQgVG9rZW4gb25seS4DCQAAZgAAAAIAAAAAAACYloAIBQAAAARwbXQxAAAABmFtb3VudAkAAAIAAAABAgAAACxwbGVhc2UgYXR0YWNoIGF0bGVhc3QgMTAgVVNEVCBpbiBwYXltZW50WzFdLgMJAAAAAAAAAggFAAAABHBtdDIAAAAHYXNzZXRJZAUAAAALVVNEVEFzc2V0SUQJAAACAAAAAQIAAACPWW91IEF0dGFjaGVkIFVTRFQgYXNzZXQgZm9yIExpcXVpZGl0eSBpbiBib3RoIHBheW1lbnRzLCBLaW5kbHkgQXR0YWNoIHBheW1lbnQxID0gVVNEVCBUb2tlbiBhbmQgcGF5bWVudDIgPSBUb2tlbiB5b3Ugd2FudCB0byBhZGQgZm9yIExpcXVpZGl0eS4DCQEAAAACIT0AAAACCAUAAAAEcG10MgAAAAdhc3NldElkCQACWQAAAAEFAAAADEVudGVyQXNzZXRJRAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAANQXNzZXQgU3RyaW5nIAUAAAAMRW50ZXJBc3NldElEAgAAAE4gaXMgbm90IG1hdGNoaW5nIHdpdGggYXR0YWNoZWQgcGF5bWVudFsyXS4gU3RyaW5nIGFuZCBwYXltZW50WzJdIG11c3QgYmUgc2FtZS4DCQEAAAACIT0AAAACCAUAAAAEcG10MgAAAAZhbW91bnQFAAAAFnF1YW50aXR5b2ZFbnRlckFzc2V0SUQJAAACAAAAAQkAASwAAAACAgAAAFhBdHRhY2hlZCBwYXltZW50WzJdIHF1YW50aXR5IGlzIG5vdCBtYXRjaGluZyBhcyBwZXIgYXR0YWNoZWQgcGF5bWVudFsxXSBVU0RULkl0IG11c3QgYmUgCQABpAAAAAEFAAAAFnF1YW50aXR5b2ZFbnRlckFzc2V0SUQDCQEAAAACIT0AAAACBQAAABVDaGVja1JldmVyc2VQYWlyUHJpY2UFAAAAHGNoZWNrcG9pbnRUb1ZlcmlmeUJvdGhQcmljZXMJAAACAAAAAQIAAAA/UHJpY2UgYW5kIFJldmVyc2UgUHJpY2UgYXJlIE1pc21hdGNoZWQgb3IgbWFuaXB1bGF0ZWQgbWFudWFsbHkuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAACVByaWNlX09mXwUAAAAMRW50ZXJBc3NldElEBQAAAA5DaGVja1BhaXJQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABBSZXZlcnNlUHJpY2VfT2ZfBQAAAAxFbnRlckFzc2V0SUQFAAAAFUNoZWNrUmV2ZXJzZVBhaXJQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAUAAAAUTmV3VVNEVEhvbGRpbmdJblBhaXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQFAAAAFU5ld0Fzc2V0SG9sZGluZ0luUGFpcgUAAAADbmlsAAAAAWkBAAAAD1JlbW92ZVBhaXJFbnRyeQAAAAEAAAAMRW50ZXJBc3NldElEBAAAAAthZG1pbnJpZ2h0cwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwIAAAAVUG9sYXJpdHlfQWRtaW5fUmlnaHRzBAAAAAtVU0RUQXNzZXRJRAEAAAAgCGWEtw/wimoa8+Jo6C4IkCTD0ydYA80s9i5eC9/aFaQEAAAAGGNoZWNrcHJvamVjdGV4cGlyZWhlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABJWb3RpbmdfRW5kX0hlaWdodF8FAAAADEVudGVyQXNzZXRJRAQAAAAZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAICAAAAElBhaXJfVW5kZXJfVm90aW5nXwUAAAAMRW50ZXJBc3NldElEBAAAAAxWb3RpbmdTdGF0dXMJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAOVm90aW5nX1N0YXR1c18FAAAADEVudGVyQXNzZXRJRAQAAAAPTmV3Vm90aW5nU3RhdHVzAgAAAARQYXNzBAAAAA1jYWxsZXJhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADWN1cnJlbnRoZWlnaHQFAAAABmhlaWdodAQAAAAdcGVuZGluZ2Jsb2Nrc2ZvcnByb2plY3RleHBpcmUJAABlAAAAAgUAAAAYY2hlY2twcm9qZWN0ZXhwaXJlaGVpZ2h0BQAAAAZoZWlnaHQDCQEAAAACIT0AAAACBQAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAAAlUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFZvdGluZyBMaXN0LgMJAQAAAAIhPQAAAAIFAAAAC2FkbWlucmlnaHRzBQAAAA1jYWxsZXJhZGRyZXNzCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACJJIGtub3cgWW91IGFyZSBub3QgQW4gQWRtaW4uIE9ubHkgBQAAAAthZG1pbnJpZ2h0cwIAAAAfIGhhcyByaWdodHMgdG8gcmVtb3ZlIHRoZSBwYWlyLgMJAABmAAAAAgUAAAAYY2hlY2twcm9qZWN0ZXhwaXJlaGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAANlZvdGluZyBBbHJlYWR5IFJ1bm5pbmcuIFlvdSBjYW4gcmVtb3ZlIHRoZSBwYWlyIGFmdGVyIAkAAaQAAAABBQAAAB1wZW5kaW5nYmxvY2tzZm9ycHJvamVjdGV4cGlyZQIAAAAHIEJsb2NrcwMJAAAAAAAAAgUAAAAMVm90aW5nU3RhdHVzBQAAAA9OZXdWb3RpbmdTdGF0dXMJAAACAAAAAQkAASwAAAACBQAAAAxFbnRlckFzc2V0SUQCAAAALCBpcyBub3cgV2hpdGVsaXN0ZWQuIFNvIHlvdSBjYW4ndCByZW1vdmUgaXQuCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgIAAAASUGFpcl9VbmRlcl9Wb3RpbmdfBQAAAAxFbnRlckFzc2V0SUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACAgAAABRWb3RpbmdfU3RhcnRfSGVpZ2h0XwUAAAAMRW50ZXJBc3NldElECQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgIAAAASVm90aW5nX0VuZF9IZWlnaHRfBQAAAAxFbnRlckFzc2V0SUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACAgAAAA5Wb3RpbmdfUGVyaW9kXwUAAAAMRW50ZXJBc3NldElECQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgIAAAAPVm90ZXNfUmVxdWlyZWRfBQAAAAxFbnRlckFzc2V0SUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACAgAAABNWb3RpbmdfTGlzdGluZ19GZWVfBQAAAAxFbnRlckFzc2V0SUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACAgAAAA5Wb3RpbmdfU3RhdHVzXwUAAAAMRW50ZXJBc3NldElECQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgIAAAAPVm90ZXNfUmVjZWl2ZWRfBQAAAAxFbnRlckFzc2V0SUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACAgAAAAlQcmljZV9PZl8FAAAADEVudGVyQXNzZXRJRAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAICAAAAEFJldmVyc2VQcmljZV9PZl8FAAAADEVudGVyQXNzZXRJRAUAAAADbmlsAAAAAWkBAAAAC1JlbW92ZUVudHJ5AAAABAAAAANLZXkAAAAES2V5MQAAAARLZXkyAAAABEtleTMJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAADS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAABEtleTEJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAES2V5MgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAARLZXkzBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXlaWSef", "height": 1675161, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Eg1w1FTws659yBX4RsBs5BwPBtWfBE4d9nQ2r8HD7oPt Next: 5jP2nSUuKvbYiFwkrwoJE9ekH165h5J6UEYBAXaSmvbB Diff:
OldNewDifferences
194194 let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
195195 let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID))
196196 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
197- let CheckPairPrice = getIntegerValue(this, ("Price_Of_" + EnterAssetID))
198197 let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
199198 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
200199 let newbalanceofUSDT = fraction(CheckUSDTBalance, CheckAssetBalance, (CheckAssetBalance + pmt.amount))
201200 let quantityofpriceasset = (CheckUSDTBalance - newbalanceofUSDT)
202- let CheckAssetDecimals = getIntegerValue(this, ("Decimals_of_" + EnterAssetID))
203201 let CurrentVotingStatus = "Fail"
204202 let SwapFee = 1
205203 let SwapFeeAddress = addressFromPublicKey(base58'GKmJ6BchUgQfwKp4mp5eX8Y9xLioYRm6e1gDfFgdAcCr')
206- let amountAssetDecimals = CheckAssetDecimals
207- let priceAssetDecimals = 6
208- let decimalsgap = ((6 - amountAssetDecimals) - 8)
209204 let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 100)
210205 let userbalancetoreceive = (quantityofpriceasset - SwapFeetoreceive)
211206 let SumupofAssetToUSDTSwapFee = match getInteger(this, ("Total_Swap_Fee_Collected_" + toBase58String(USDTAssetID))) {
264259 then i.payments[0]
265260 else throw("Only USDT Token is required as an Attached payment[1].")
266261 let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
262+ let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
263+ let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
264+ let newbalanceofAsset = fraction(CheckUSDTBalance, CheckAssetBalance, (CheckUSDTBalance + pmt.amount))
265+ let quantityofpriceasset = (CheckAssetBalance - newbalanceofAsset)
267266 let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID))
268267 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
269- let CheckReversePairPrice = getIntegerValue(this, ("ReversePrice_Of_" + EnterAssetID))
270- let CheckAssetDecimals = getIntegerValue(this, ("Decimals_of_" + EnterAssetID))
271268 let CurrentVotingStatus = "Fail"
272- let ReverseSwapFee = 1
273- let amountAssetDecimals = CheckAssetDecimals
274- let priceAssetDecimals = 6
275- let decimalsgap = ((6 - amountAssetDecimals) - 8)
276- 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))
277- let getAssetBalance = assetBalance(this, fromBase58String(EnterAssetID))
278- let newAssetBalance = (getAssetBalance - quantityofpriceasset)
269+ let SwapFee = 1
270+ let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 100)
271+ let userbalancetoreceive = (quantityofpriceasset - SwapFeetoreceive)
279272 if ((checkpairisavailableornot != EnterAssetID))
280273 then throw("Pair is not available in Whitelisted Asset.")
281274 else if ((VotingStatus == CurrentVotingStatus))
286279 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.")
287280 else if ((1000000 > pmt.amount))
288281 then throw("Your Attached USDT Amount is very low. Attach Atleast 1 USDT to Claim the minimum Tokens.")
289- 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))]
282+ else if ((CheckUSDTBalance == 0))
283+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
284+ else if ((CheckAssetBalance == 0))
285+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
286+ else [IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), 0), ScriptTransfer(i.caller, userbalancetoreceive, fromBase58String(EnterAssetID)), ScriptTransfer(i.caller, SwapFeetoreceive, fromBase58String(EnterAssetID))]
290287 }
291288
292289
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44
55
66 @Callable(i)
77 func RegisterPairForVoting (AssetID1,days,ListingPrice) = {
88 let pmt1 = value(i.payments[0])
99 let pmt2 = value(i.payments[1])
1010 let FeeAddress = base58'GKmJ6BchUgQfwKp4mp5eX8Y9xLioYRm6e1gDfFgdAcCr'
1111 let maximumvotingdays = 90
1212 let BalletAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y'
1313 let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
1414 let currentKey = toBase58String(i.caller.bytes)
1515 let TN = !(isDefined(pmt2.assetId))
1616 let oneday = 1440
1717 let NoOfDaysBlocks = (oneday * days)
1818 let gap = (NoOfDaysBlocks - 43199)
1919 let votesrequired = ((100000 + ((11574 * gap) / 10000)) * 100000000)
2020 let votingExpire = (height + NoOfDaysBlocks)
2121 let fetchpair = getString(this, ("Pair_Under_Voting_" + AssetID1))
2222 let votingstatus = "Fail"
2323 let assetinfopmt2 = fromBase58String(AssetID1)
2424 let reverseprice = fraction(1, 1000000000000, ListingPrice)
2525 if ((43 > size(AssetID1)))
2626 then throw("Wrong AssetID1 is Entered for Voting. Please Enter a Valid AssetID1. Probably you entered an ASSETID1 less than 43 Chars.")
2727 else if ((29 >= days))
2828 then throw("Enter no. of days in between 30 to 90.")
2929 else if ((days > maximumvotingdays))
3030 then throw("You Entered days greater than 90 please Enter no. of days in between 1 to 90.")
3131 else if ((fetchpair == AssetID1))
3232 then throw("Pair Already Exist in Voting List.")
3333 else if ((size(i.payments) != 2))
3434 then throw("Two attached assets expected as payment. Kindly Attach payment1 = Ballet Token and payment2 = Token you want to add to List for Voting.")
3535 else if ((pmt1.assetId != BalletAssetID))
3636 then throw("Incorrect asset attached for Voting in payment[1], please attach 1000 Ballet Token only.")
3737 else if ((pmt1.amount != 10000000))
3838 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."))
3939 else if ((pmt2.assetId != assetinfopmt2))
4040 then throw("Asset String Attached in ASSETID1 is not matching with Payment2 AssetID.")
4141 else if ((TN == true))
4242 then throw("You Attached TN Asset ID for Voting, please attach the Token You want to list in payment[2].")
4343 else if ((pmt2.assetId == BalletAssetID))
4444 then throw("You Attached Ballet asset for Voting in both payments, please attach the Token You want to list in payment[2].")
4545 else if ((9999 >= ListingPrice))
4646 then throw("Lower listing Price is Entered per token, please enter as a valid range in between range [0.01 - 1M] USDT.")
4747 else if ((ListingPrice > 999999999999))
4848 then throw("Higher listing Price is Entered per token, please enter as a valid range in between range [0.01 - 1M] USDT.")
4949 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)]
5050 }
5151
5252
5353
5454 @Callable(i)
5555 func IssueBallet () = {
5656 let pmt = value(i.payments[0])
5757 let currentKey = toBase58String(i.caller.bytes)
5858 let BalletAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y'
5959 let PricePerBallet = getIntegerValue(this, "BALLET/TN")
6060 let NewBalletToUser = fraction(100000, pmt.amount, PricePerBallet)
6161 let PreviousIssuedBallet = getIntegerValue(this, "Total_Issued_Ballet:")
6262 let TotalIssuedBallet = (PreviousIssuedBallet + NewBalletToUser)
6363 let PreviousBalletReserveValue = getIntegerValue(this, "Total_Ballet_Reserve_In_TN:")
6464 let BalletReserveValue = (PreviousBalletReserveValue + pmt.amount)
6565 let PreviousBalletBackupPrice = getIntegerValue(this, "Ballet_Backup_Value_In_TN:")
6666 let BalletBackupPrice = fraction(100000, BalletReserveValue, TotalIssuedBallet)
6767 let FeeAddress = base58'GKmJ6BchUgQfwKp4mp5eX8Y9xLioYRm6e1gDfFgdAcCr'
6868 let FeePercentage = 1
6969 let BalanceTokensReturnedToUser = (100 - FeePercentage)
7070 if (isDefined(pmt.assetId))
7171 then throw("Incorrect asset attached, please attach TN.")
7272 else if ((5000000 > pmt.amount))
7373 then throw("Please Attach minimum 0.05 TN To Issue Ballet Asset.")
7474 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)]
7575 }
7676
7777
7878
7979 @Callable(i)
8080 func Liquidate () = {
8181 let currentKey = toBase58String(i.callerPublicKey)
8282 let pmt = value(i.payments[0])
8383 let BalletAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y'
8484 let PreviousIssuedBallet = getIntegerValue(this, "Total_Issued_Ballet:")
8585 let TotalIssuedBallet = (PreviousIssuedBallet - pmt.amount)
8686 let PreviousBalletReserveValue = getIntegerValue(this, "Total_Ballet_Reserve_In_TN:")
8787 let PreviousBalletBackupPrice = getIntegerValue(this, "Ballet_Backup_Value_In_TN:")
8888 let calculateburnvalue = fraction(PreviousBalletBackupPrice, pmt.amount, 100000)
8989 let BalletReserveValue = (PreviousBalletReserveValue - calculateburnvalue)
9090 let BalletBackupPrice = fraction(100000, BalletReserveValue, TotalIssuedBallet)
9191 if ((pmt.assetId != BalletAssetID))
9292 then throw("Kindly Deposit Only 44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y (Ballet).")
9393 else if ((100000 > pmt.amount))
9494 then throw("Attach Amount must be greater than 0.001 Ballet.")
9595 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)]
9696 }
9797
9898
9999
100100 @Callable(i)
101101 func DoVoting (EnterAssetID) = {
102102 let pmt = if ((size(i.payments) == 1))
103103 then i.payments[0]
104104 else throw("Ballet Token is required as Attached payment")
105105 let calleraddress = toBase58String(i.caller.bytes)
106106 let BalletAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y'
107107 let NewVotingStatus = "Pass"
108108 let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
109109 let checkprojectexpireheight = getIntegerValue(this, ("Voting_End_Height_" + EnterAssetID))
110110 let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID))
111111 let checkvotesrequired = getIntegerValue(this, ("Votes_Required_" + EnterAssetID))
112112 let checkvotesreceived = getIntegerValue(this, ("Votes_Received_" + EnterAssetID))
113113 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
114114 let currentvotes = match getInteger(this, ("Votes_Received_" + EnterAssetID)) {
115115 case a: Int =>
116116 a
117117 case _ =>
118118 0
119119 }
120120 let newvotescount = (currentvotes + pmt.amount)
121121 let individualvotes = match getInteger(this, ((("Votes_Received_" + calleraddress) + "_") + EnterAssetID)) {
122122 case b: Int =>
123123 b
124124 case _ =>
125125 0
126126 }
127127 let individualvotescount = (individualvotes + pmt.amount)
128128 let checkwhitelist = (checkvotesreceived >= checkvotesrequired)
129129 let info = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
130130 let decimals = info.decimals
131131 if ((checkpairisavailableornot != EnterAssetID))
132132 then throw("Pair is not available in Voting List.")
133133 else if ((height > checkprojectexpireheight))
134134 then throw((("Voting timeline for " + EnterAssetID) + " is expired."))
135135 else if ((pmt.assetId != BalletAssetID))
136136 then throw((("Kindly Attach Only " + toBase58String(BalletAssetID)) + " (Ballet)."))
137137 else if ((VotingStatus == NewVotingStatus))
138138 then throw((("Voting for " + EnterAssetID) + " pair is completed and it’s available in whitelist."))
139139 else if (checkwhitelist)
140140 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)]
141141 else [IntegerEntry(("Votes_Received_" + EnterAssetID), newvotescount), IntegerEntry(((("Votes_Received_" + calleraddress) + "_") + EnterAssetID), individualvotescount)]
142142 }
143143
144144
145145
146146 @Callable(i)
147147 func IssueLPToken (EnterAssetID) = {
148148 let info = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
149149 let name = info.name
150150 let LPissue = Issue(("LP_" + take(name, 6)), ((("LP_" + take(name, 6)) + " is a Liquidity Provider Token Issued Against ") + EnterAssetID), 1, 0, true)
151151 let LPid = calculateAssetId(LPissue)
152152 let checkLPToken = getStringValue(this, ("LP_" + EnterAssetID))
153153 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
154154 let NewVotingStatus = "Pass"
155155 if (isDefined(checkLPToken))
156156 then throw("LP Token Already Exist.")
157157 else if ((VotingStatus != NewVotingStatus))
158158 then throw("LP Token must be a Whitelisted Token.")
159159 else [LPissue, StringEntry(("LP_" + EnterAssetID), toBase58String(LPid))]
160160 }
161161
162162
163163
164164 @Callable(i)
165165 func WithdrawVotedTokens (EnterAssetID) = {
166166 let pmt = i.payments[0]
167167 let calleraddress = toBase58String(i.caller.bytes)
168168 let BalletAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y'
169169 let checkprojectexpireheight = getIntegerValue(this, ("Voting_End_Height_" + EnterAssetID))
170170 let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID))
171171 let checkuservotingbalance = getIntegerValue(this, ((("Votes_Received_" + calleraddress) + "_") + EnterAssetID))
172172 let pendingblocksforprojectexpire = (checkprojectexpireheight - height)
173173 if ((checkpairisavailableornot != EnterAssetID))
174174 then throw("Pair is not available in Voting List.")
175175 else if ((checkprojectexpireheight > height))
176176 then throw((("Voting Already Running. You can withdraw your Ballet Token only after the expire of " + toString(pendingblocksforprojectexpire)) + " Blocks"))
177177 else if ((0 >= checkuservotingbalance))
178178 then throw("You don't have any dues of ballet balance in this Voting Pair.")
179179 else if (isDefined(pmt.assetId))
180180 then throw("Don't attach any other asset. Please attach 0.1 TN as a fee to release your token")
181181 else if ((pmt.amount != 10000000))
182182 then throw("Please attach 0.1 TN as a fee to release your token.")
183183 else [IntegerEntry(((("Votes_Received_" + calleraddress) + "_") + EnterAssetID), 0), ScriptTransfer(i.caller, checkuservotingbalance, BalletAssetID)]
184184 }
185185
186186
187187
188188 @Callable(i)
189189 func SwapAssetToUSDTPairEntry (EnterAssetID) = {
190190 let calleraddress = toBase58String(i.caller.bytes)
191191 let pmt = if ((size(i.payments) == 1))
192192 then i.payments[0]
193193 else throw("Whitelisted Swap Token is required as Attached payment[1].")
194194 let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
195195 let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID))
196196 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
197- let CheckPairPrice = getIntegerValue(this, ("Price_Of_" + EnterAssetID))
198197 let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
199198 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
200199 let newbalanceofUSDT = fraction(CheckUSDTBalance, CheckAssetBalance, (CheckAssetBalance + pmt.amount))
201200 let quantityofpriceasset = (CheckUSDTBalance - newbalanceofUSDT)
202- let CheckAssetDecimals = getIntegerValue(this, ("Decimals_of_" + EnterAssetID))
203201 let CurrentVotingStatus = "Fail"
204202 let SwapFee = 1
205203 let SwapFeeAddress = addressFromPublicKey(base58'GKmJ6BchUgQfwKp4mp5eX8Y9xLioYRm6e1gDfFgdAcCr')
206- let amountAssetDecimals = CheckAssetDecimals
207- let priceAssetDecimals = 6
208- let decimalsgap = ((6 - amountAssetDecimals) - 8)
209204 let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 100)
210205 let userbalancetoreceive = (quantityofpriceasset - SwapFeetoreceive)
211206 let SumupofAssetToUSDTSwapFee = match getInteger(this, ("Total_Swap_Fee_Collected_" + toBase58String(USDTAssetID))) {
212207 case a: Int =>
213208 a
214209 case _ =>
215210 0
216211 }
217212 let NewSumupofAssetToUSDTSwapFee = (SumupofAssetToUSDTSwapFee + SwapFeetoreceive)
218213 let SumupAssetBalance = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
219214 case a: Int =>
220215 a
221216 case _ =>
222217 0
223218 }
224219 let NewSumupofAssetBalance = (CheckAssetBalance + pmt.amount)
225220 let SumupUSDTBalance = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
226221 case a: Int =>
227222 a
228223 case _ =>
229224 0
230225 }
231226 let NewSumupofUSDTBalance = (CheckUSDTBalance - quantityofpriceasset)
232227 let SumupofSwapTxns = match getInteger(this, "Total_of_Swaps_Txns") {
233228 case a: Int =>
234229 a
235230 case _ =>
236231 0
237232 }
238233 let NewSumupofSwapTxns = (SumupofSwapTxns + 1)
239234 if ((checkpairisavailableornot != EnterAssetID))
240235 then throw("Pair is not available in Whitelisted Asset.")
241236 else if ((VotingStatus == CurrentVotingStatus))
242237 then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
243238 else if ((pmt.assetId == USDTAssetID))
244239 then throw("You can't Attach USDT as an Attached Payment. Only Whitelisted Tokens are accepted.")
245240 else if ((pmt.assetId != fromBase58String(EnterAssetID)))
246241 then throw(("Incorrect asset attached, please attach or send " + EnterAssetID))
247242 else if ((10000 > quantityofpriceasset))
248243 then throw((("Your Attached Asset Amount is very low. Attach More " + EnterAssetID) + " Tokens to Claim the minimum Amount of 1 cent atleast."))
249244 else if ((CheckUSDTBalance == 0))
250245 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
251246 else if ((CheckAssetBalance == 0))
252247 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
253248 else if ((quantityofpriceasset > CheckUSDTBalance))
254249 then throw((("Pool Only has a Liquidity of " + toString((CheckUSDTBalance / pow(10, 0, 6, 0, 0, UP)))) + " USDT. Add Liquidity into Pool."))
255250 else [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)]
256251 }
257252
258253
259254
260255 @Callable(i)
261256 func SwapUSDTToAssetPairEntry (EnterAssetID) = {
262257 let calleraddress = toBase58String(i.caller.bytes)
263258 let pmt = if ((size(i.payments) == 1))
264259 then i.payments[0]
265260 else throw("Only USDT Token is required as an Attached payment[1].")
266261 let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
262+ let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
263+ let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
264+ let newbalanceofAsset = fraction(CheckUSDTBalance, CheckAssetBalance, (CheckUSDTBalance + pmt.amount))
265+ let quantityofpriceasset = (CheckAssetBalance - newbalanceofAsset)
267266 let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID))
268267 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
269- let CheckReversePairPrice = getIntegerValue(this, ("ReversePrice_Of_" + EnterAssetID))
270- let CheckAssetDecimals = getIntegerValue(this, ("Decimals_of_" + EnterAssetID))
271268 let CurrentVotingStatus = "Fail"
272- let ReverseSwapFee = 1
273- let amountAssetDecimals = CheckAssetDecimals
274- let priceAssetDecimals = 6
275- let decimalsgap = ((6 - amountAssetDecimals) - 8)
276- 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))
277- let getAssetBalance = assetBalance(this, fromBase58String(EnterAssetID))
278- let newAssetBalance = (getAssetBalance - quantityofpriceasset)
269+ let SwapFee = 1
270+ let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 100)
271+ let userbalancetoreceive = (quantityofpriceasset - SwapFeetoreceive)
279272 if ((checkpairisavailableornot != EnterAssetID))
280273 then throw("Pair is not available in Whitelisted Asset.")
281274 else if ((VotingStatus == CurrentVotingStatus))
282275 then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
283276 else if ((EnterAssetID == toBase58String(USDTAssetID)))
284277 then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input and Attach USDT as an attachment Token in payment[1].")
285278 else if ((pmt.assetId != USDTAssetID))
286279 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.")
287280 else if ((1000000 > pmt.amount))
288281 then throw("Your Attached USDT Amount is very low. Attach Atleast 1 USDT to Claim the minimum Tokens.")
289- 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))]
282+ else if ((CheckUSDTBalance == 0))
283+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
284+ else if ((CheckAssetBalance == 0))
285+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
286+ else [IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), 0), ScriptTransfer(i.caller, userbalancetoreceive, fromBase58String(EnterAssetID)), ScriptTransfer(i.caller, SwapFeetoreceive, fromBase58String(EnterAssetID))]
290287 }
291288
292289
293290
294291 @Callable(i)
295292 func AddLiquidity (EnterAssetID) = {
296293 let calleraddress = toBase58String(i.caller.bytes)
297294 let pmt1 = value(i.payments[0])
298295 let pmt2 = value(i.payments[1])
299296 let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
300297 let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID))
301298 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
302299 let CheckPairPrice = getIntegerValue(this, ("Price_Of_" + EnterAssetID))
303300 let CheckReversePairPrice = getIntegerValue(this, ("ReversePrice_Of_" + EnterAssetID))
304301 let CheckAssetDecimals = getIntegerValue(this, ("Decimals_of_" + EnterAssetID))
305302 let CurrentVotingStatus = "Fail"
306303 let AddLiquidityFee = 100000
307304 let amountAssetDecimals = CheckAssetDecimals
308305 let decimalsgap = ((6 - amountAssetDecimals) - 8)
309306 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))
310307 let checkpointToVerifyBothPrices = fraction(1, 1000000000000, CheckPairPrice)
311308 let USDTHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
312309 case a: Int =>
313310 a
314311 case _ =>
315312 0
316313 }
317314 let NewUSDTHoldingInPair = (USDTHoldingInPair + pmt1.amount)
318315 let AssetHoldingInPair = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
319316 case a: Int =>
320317 a
321318 case _ =>
322319 0
323320 }
324321 let NewAssetHoldingInPair = (AssetHoldingInPair + pmt2.amount)
325322 if ((checkpairisavailableornot != EnterAssetID))
326323 then throw("Pair is not available in Whitelisted Asset.")
327324 else if ((VotingStatus == CurrentVotingStatus))
328325 then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
329326 else if ((EnterAssetID == toBase58String(USDTAssetID)))
330327 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].")
331328 else if ((size(i.payments) != 2))
332329 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.")
333330 else if ((pmt1.assetId != USDTAssetID))
334331 then throw("Incorrect asset attached for Liquidity in payment[1], please attach USDT Token only.")
335332 else if ((10000000 > pmt1.amount))
336333 then throw("please attach atleast 10 USDT in payment[1].")
337334 else if ((pmt2.assetId == USDTAssetID))
338335 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.")
339336 else if ((pmt2.assetId != fromBase58String(EnterAssetID)))
340337 then throw((("Asset String " + EnterAssetID) + " is not matching with attached payment[2]. String and payment[2] must be same."))
341338 else if ((pmt2.amount != quantityofEnterAssetID))
342339 then throw(("Attached payment[2] quantity is not matching as per attached payment[1] USDT.It must be " + toString(quantityofEnterAssetID)))
343340 else if ((CheckReversePairPrice != checkpointToVerifyBothPrices))
344341 then throw("Price and Reverse Price are Mismatched or manipulated manually.")
345342 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)]
346343 }
347344
348345
349346
350347 @Callable(i)
351348 func RemovePairEntry (EnterAssetID) = {
352349 let adminrights = getStringValue(this, "Polarity_Admin_Rights")
353350 let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
354351 let checkprojectexpireheight = getIntegerValue(this, ("Voting_End_Height_" + EnterAssetID))
355352 let checkpairisavailableornot = getString(this, ("Pair_Under_Voting_" + EnterAssetID))
356353 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
357354 let NewVotingStatus = "Pass"
358355 let calleraddress = toBase58String(i.caller.bytes)
359356 let currentheight = height
360357 let pendingblocksforprojectexpire = (checkprojectexpireheight - height)
361358 if ((checkpairisavailableornot != EnterAssetID))
362359 then throw("Pair is not available in Voting List.")
363360 else if ((adminrights != calleraddress))
364361 then throw((("I know You are not An Admin. Only " + adminrights) + " has rights to remove the pair."))
365362 else if ((checkprojectexpireheight > height))
366363 then throw((("Voting Already Running. You can remove the pair after " + toString(pendingblocksforprojectexpire)) + " Blocks"))
367364 else if ((VotingStatus == NewVotingStatus))
368365 then throw((EnterAssetID + " is now Whitelisted. So you can't remove it."))
369366 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))]
370367 }
371368
372369
373370
374371 @Callable(i)
375372 func RemoveEntry (Key,Key1,Key2,Key3) = [DeleteEntry(Key), DeleteEntry(Key1), DeleteEntry(Key2), DeleteEntry(Key3)]
376373
377374
378375 @Verifier(tx)
379376 func verify () = match tx {
380377 case _ =>
381378 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
382379 }
383380

github/deemru/w8io/169f3d6 
63.98 ms