tx · C7EMUrbJvfo1YZd8n7fR7Lkr2Pw1skyDk2qsFFN93Kwz

3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX:  -0.05000000 Waves

2019.10.28 07:23 [739466] smart account 3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX > SELF 0.00000000 Waves

{ "type": 13, "id": "C7EMUrbJvfo1YZd8n7fR7Lkr2Pw1skyDk2qsFFN93Kwz", "fee": 5000000, "feeAssetId": null, "timestamp": 1572236593845, "version": 1, "sender": "3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX", "senderPublicKey": "ACfUG5PwG2GssMuyEwVEhkYAbbbP1geSHR8XoNxLyu6V", "proofs": [ "5B4H5rYCxbEx6KBvEAJvrBypnDaBYX5GWYcBfRJ9uKErp65hEQd2oHHzyZR2evPnwtWfRo4ybcqrqSjMyyB1Mr2" ], "script": "base64:AAIDAAAAAAAAAA4IARIECgIIARIECgIIAgAAACYAAAAACVJTQVBVQkxJQwkAAlsAAAABAgAAAY9iYXNlNjQ6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFnNGRBUjZYYkJEQVM5aHIvRWozZEp2NkZmYzQ2NngvbU9HTVdVM2xyQUJzM3FhOEJIbXVKR25rZmJwRWYydkF3WVRPV1B2dnpmTTEwT0JiZmxvU3lxM2M5TUt2eVRlMWx1QkxHcVc0dlpVWEl5dlNnejFsaXlVVmVmSVF5M2R5RjlqYmVUWmJDMGJiY1QvN08zREVMKzAxejZBK3JEQ2FjU1owbEdvbFNRNkFuaEx4eklrVnBPUUpickJtQyt4K1p1WlBDTVd6SnluZDVhZU9uN2phai9ta1JWeXhlNmcvME9oV3o0TmlpWlhldU1SQis4bUt5MGZXRC9VbElsWldIc0FTMlptcmtYS3FqTHEwLzB3cjhJTEprem5qU3Fkbkk1SWJqZzN1UXJqLzRBTitpOXIyOGFRNzMvWmtQdFk1U2J3MEFPaUFCQnU3Z0htcTlheVZ4WlFJREFRQUIAAAAAD0dBTUVTQ09VTlRFUktFWQIAAAAJJEdBTUVfTlVNAAAAAA5SRVNFUlZBVElPTktFWQIAAAAQJFJFU0VSVkVEX0FNT1VOVAAAAAAEV0JFVAEAAAAgD5uLrFpvaCc5H1Jt+IyA7GJAqs11k4f4jn5gjTii4MkAAAAAB1dBVkVMRVQAAAAAAAX14QAAAAAAC0ZFRVdBVkVTQkVUAAAAAAAAAAAEAAAAAAlGRUVNQ0FGRUUAAAAAAAAAAAIAAAAADlNUQVRFU1VCTUlUVEVEAgAAAAlTVUJNSVRURUQAAAAACFNUQVRFV09OAgAAAANXT04AAAAACVNUQVRFTE9TVAIAAAAETE9TVAAAAAAJUk9MTFVOREVSAgAAAAVVTkRFUgAAAAAIUk9MTE9WRVICAAAABE9WRVIAAAAABkJFVE1JTgkAAGgAAAACAAAAAAAAAABkBQAAAAdXQVZFTEVUAAAAAAZCRVRNQVgJAABoAAAAAgAAAAAAATEtAAUAAAAHV0FWRUxFVAAAAAANUFJFRElDVElPTk1JTgAAAAAAAAAAAQAAAAANUFJFRElDVElPTk1BWAAAAAAAAAAAYwAAAAAMSWR4R2FtZVN0YXRlAAAAAAAAAAAAAAAAAA1JZHhQcmVkaWN0aW9uAAAAAAAAAAABAAAAAAdJZHhUeXBlAAAAAAAAAAACAAAAABFJZHhQbGF5ZXJQdWJLZXk1OAAAAAAAAAAAAwAAAAAJSWR4V2luQW10AAAAAAAAAAAEAAAAAA5JZHhSYW5kT3JFbXB0eQAAAAAAAAAABQEAAAAQSW5jcmVtZW50R2FtZU51bQAAAAAEAAAAB2dhbWVOdW0EAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAPR0FNRVNDT1VOVEVSS0VZAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA251bQUAAAAHJG1hdGNoMAUAAAADbnVtAAAAAAAAAAAACQAAZAAAAAIFAAAAB2dhbWVOdW0AAAAAAAAAAAEBAAAAEkV4dHJhY3RSZXNlcnZlZEFtdAAAAAAEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAOUkVTRVJWQVRJT05LRVkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAeVmFsaWRhdGVBbmRJbmNyZWFzZVJlc2VydmVkQW10AAAAAQAAAAZ3aW5BbXQEAAAAEW5ld1Jlc2VydmVkQW1vdW50CQAAZAAAAAIJAQAAABJFeHRyYWN0UmVzZXJ2ZWRBbXQAAAAABQAAAAZ3aW5BbXQEAAAAB2JhbGFuY2UJAAPrAAAAAgUAAAAEdGhpcwUAAAAEV0JFVAMJAABmAAAAAgUAAAARbmV3UmVzZXJ2ZWRBbW91bnQFAAAAB2JhbGFuY2UJAAACAAAAAQIAAABWSW5zdWZmaWNpZW50IGZ1bmRzIG9uIFdhdmVzYmV0IERpY2UgYWNjb3VudC4gVHJhbnNhY3Rpb24gd2FzIHJlamVjdGVkIGZvciB5b3VyIHNhZmV0eS4FAAAAEW5ld1Jlc2VydmVkQW1vdW50AQAAABNGb3JtYXRHYW1lRGF0YVBhcmFtAAAAAQAAAAFwBAAAAAFzCQABMQAAAAEFAAAAAXADCQAAAAAAAAIFAAAAAXMAAAAAAAAAAAAJAAACAAAAAQIAAAAlUGFyYW1ldGVyIHNpemUgbXVzdCBiZSBncmVhdGVyIHRoZW4gMAMJAABmAAAAAgUAAAABcwAAAAAAAAAAYwkAAAIAAAABAgAAACRQYXJhbWV0ZXIgc2l6ZSBtdXN0IGJlIGxlc3MgdGhlbiAxMDADCQAAZgAAAAIAAAAAAAAAAAoFAAAAAXMJAAEsAAAAAgkAASwAAAACAgAAAAEwCQABpAAAAAEFAAAAAXMFAAAAAXAJAAEsAAAAAgkAAaQAAAABBQAAAAFzBQAAAAFwAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYAAAAJZ2FtZVN0YXRlAAAACnByZWRpY3Rpb24AAAAIdHlwZVJvbGwAAAAOcGxheWVyUHViS2V5NTgAAAAGd2luQW10AAAAC3JhbmRPckVtcHR5BAAAAAxmdWxsU3RhdGVTdHIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQEAAAATRm9ybWF0R2FtZURhdGFQYXJhbQAAAAEFAAAACWdhbWVTdGF0ZQIAAAABXwkBAAAAE0Zvcm1hdEdhbWVEYXRhUGFyYW0AAAABCQABpAAAAAEFAAAACnByZWRpY3Rpb24CAAAAAV8JAQAAABNGb3JtYXRHYW1lRGF0YVBhcmFtAAAAAQUAAAAIdHlwZVJvbGwCAAAAAV8JAQAAABNGb3JtYXRHYW1lRGF0YVBhcmFtAAAAAQUAAAAOcGxheWVyUHViS2V5NTgCAAAAAV8JAQAAABNGb3JtYXRHYW1lRGF0YVBhcmFtAAAAAQkAAaQAAAABBQAAAAZ3aW5BbXQDCQAAAAAAAAIFAAAAC3JhbmRPckVtcHR5AgAAAAAFAAAADGZ1bGxTdGF0ZVN0cgkAASwAAAACCQABLAAAAAIFAAAADGZ1bGxTdGF0ZVN0cgIAAAABXwkBAAAAE0Zvcm1hdEdhbWVEYXRhUGFyYW0AAAABBQAAAAtyYW5kT3JFbXB0eQEAAAAZUmVtb3ZlVW5kZXJzY29yZUlmUHJlc2VudAAAAAEAAAAJcmVtYWluaW5nAwkAAGYAAAACCQABMQAAAAEFAAAACXJlbWFpbmluZwAAAAAAAAAAAAkAATAAAAACBQAAAAlyZW1haW5pbmcAAAAAAAAAAAEFAAAACXJlbWFpbmluZwEAAAASUGFyc2VOZXh0QXR0cmlidXRlAAAAAQAAAAlyZW1haW5pbmcEAAAAAXMJAAExAAAAAQUAAAAJcmVtYWluaW5nAwkAAGYAAAACBQAAAAFzAAAAAAAAAAAABAAAAAJubgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABLwAAAAIFAAAACXJlbWFpbmluZwAAAAAAAAAAAgQAAAABdgkAAS8AAAACCQABMAAAAAIFAAAACXJlbWFpbmluZwAAAAAAAAAAAgUAAAACbm4EAAAADHRtcFJlbWFpbmluZwkAATAAAAACBQAAAAlyZW1haW5pbmcJAABkAAAAAgUAAAACbm4AAAAAAAAAAAIEAAAADnJlbWFpbmluZ1N0YXRlCQEAAAAZUmVtb3ZlVW5kZXJzY29yZUlmUHJlc2VudAAAAAEFAAAADHRtcFJlbWFpbmluZwkABEwAAAACBQAAAAF2CQAETAAAAAIFAAAADnJlbWFpbmluZ1N0YXRlBQAAAANuaWwJAAACAAAAAQIAAAA0RW1wdHkgc3RyaW5nIHdhcyBwYXNzZWQgaW50byBwYXJzZU5leHRBdHRyaWJ1dGUgZnVuYwEAAAATUGFyc2VHYW1lUmF3RGF0YVN0cgAAAAEAAAALcmF3U3RhdGVTdHIEAAAACWdhbWVTdGF0ZQkBAAAAElBhcnNlTmV4dEF0dHJpYnV0ZQAAAAEFAAAAC3Jhd1N0YXRlU3RyBAAAAApwcmVkaWN0aW9uCQEAAAASUGFyc2VOZXh0QXR0cmlidXRlAAAAAQkAAZEAAAACBQAAAAlnYW1lU3RhdGUAAAAAAAAAAAEEAAAACHJvbGxUeXBlCQEAAAASUGFyc2VOZXh0QXR0cmlidXRlAAAAAQkAAZEAAAACBQAAAApwcmVkaWN0aW9uAAAAAAAAAAABBAAAAA5wbGF5ZXJQdWJLZXk1OAkBAAAAElBhcnNlTmV4dEF0dHJpYnV0ZQAAAAEJAAGRAAAAAgUAAAAIcm9sbFR5cGUAAAAAAAAAAAEEAAAABndpbkFtdAkBAAAAElBhcnNlTmV4dEF0dHJpYnV0ZQAAAAEJAAGRAAAAAgUAAAAOcGxheWVyUHViS2V5NTgAAAAAAAAAAAEJAARMAAAAAgkAAZEAAAACBQAAAAlnYW1lU3RhdGUAAAAAAAAAAAAJAARMAAAAAgkAAZEAAAACBQAAAApwcmVkaWN0aW9uAAAAAAAAAAAACQAETAAAAAIJAAGRAAAAAgUAAAAIcm9sbFR5cGUAAAAAAAAAAAAJAARMAAAAAgkAAZEAAAACBQAAAA5wbGF5ZXJQdWJLZXk1OAAAAAAAAAAAAAkABEwAAAACCQABkQAAAAIFAAAABndpbkFtdAAAAAAAAAAAAAUAAAADbmlsAQAAABNFeHRyYWN0R2FtZURhdGFMaXN0AAAAAQAAAAZnYW1lSWQEAAAACnJhd0RhdGFTdHIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAA3N0cgUAAAAHJG1hdGNoMAUAAAADc3RyCQAAAgAAAAEJAAEsAAAAAgIAAAAWQ291bGRuJ3QgZmluZCBnYW1lIGJ5IAUAAAAGZ2FtZUlkCQEAAAATUGFyc2VHYW1lUmF3RGF0YVN0cgAAAAEFAAAACnJhd0RhdGFTdHIBAAAAE0RlY3JlYXNlUmVzZXJ2ZWRBbXQAAAACAAAABmdhbWVJZAAAAAZ3aW5BbXQEAAAAEW5ld1Jlc2VydmVkQW1vdW50CQAAZQAAAAIJAQAAABJFeHRyYWN0UmVzZXJ2ZWRBbXQAAAAABQAAAAZ3aW5BbXQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEW5ld1Jlc2VydmVkQW1vdW50CQAAAgAAAAECAAAAQkludmFsaWQgRGljZSBSb2xsZXIgYWNjb3VudCBzdGF0ZSAtIHJlc2VydmVkIGFtb3VudCBpcyBsZXNzIHRoYW4gMAkBAAAACURhdGFFbnRyeQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZBQAAABFuZXdSZXNlcnZlZEFtb3VudAEAAAAPR2VuZXJhdGVSYW5kSW50AAAAAgAAAAZnYW1lSWQAAAAHcnNhU2lnbgQAAAALcnNhU2lnVmFsaWQJAAH4AAAABAUAAAAGU0hBMjU2CQABmwAAAAEFAAAABmdhbWVJZAUAAAAHcnNhU2lnbgUAAAAJUlNBUFVCTElDAwUAAAALcnNhU2lnVmFsaWQEAAAABHJhbmQJAABqAAAAAgkABLEAAAABCQAB9wAAAAEFAAAAB3JzYVNpZ24AAAAAAAAAAGQDCQAAZgAAAAIAAAAAAAAAAAAFAAAABHJhbmQJAABkAAAAAgkAAGgAAAACAP//////////BQAAAARyYW5kAAAAAAAAAAABCQAAZAAAAAIFAAAABHJhbmQAAAAAAAAAAAEJAAACAAAAAQIAAAAVSW52YWxpZCBSU0Egc2lnbmF0dXJlAQAAAAlSYW5kVG9TdHIAAAABAAAAAXIDAwkAAGcAAAACBQAAAAFyAAAAAAAAAAABCQAAZwAAAAIAAAAAAAAAAGQFAAAAAXIHCQABpAAAAAEFAAAAAXIJAAACAAAAAQkAASwAAAACAgAAADxVbnN1cHBvcnRlZCByIHBhcmFtZXRlciBwYXNzZWQ6IGV4cGVjdGVkPVsxLC4uLiwxMDBdIGFjdHVhbD0JAAGkAAAAAQUAAAABcgEAAAAMV2luU2NyaXB0U2V0AAAABQAAAAZnYW1lSWQAAAANcGxheWVyQWRkcmVzcwAAAAZ3aW5BbXQAAAAObmV3R2FtZURhdGFTdHIAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAADndTZXRDb21tb25EYXRhCQAETAAAAAIFAAAAEWRlY3JlYXNlZFJlc2VydmVzBQAAAANuaWwEAAAADnRTZXRDb21tb25EYXRhCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADXBsYXllckFkZHJlc3MFAAAABndpbkFtdAUAAAAEV0JFVAUAAAADbmlsBAAAAAhnYW1lRGF0YQkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAAObmV3R2FtZURhdGFTdHIJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIFAAAACGdhbWVEYXRhBQAAAA53U2V0Q29tbW9uRGF0YQkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAAOdFNldENvbW1vbkRhdGEBAAAACk11bHRpcGxpZXIAAAACAAAACnByZWRpY3Rpb24AAAAIcm9sbFR5cGUDCQAAAAAAAAIFAAAACHJvbGxUeXBlBQAAAAlST0xMVU5ERVIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAEAAAAAAACWTJADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAIAAAAAAABLJkgDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAMAAAAAAAAyGYIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAQAAAAAAAAlkyQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAUAAAAAAAAeD1ADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAYAAAAAAAAZDLwDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAcAAAAAAAAVeKQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAgAAAAAAAASyZIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAkAAAAAAAAQsygDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAoAAAAAAAAPB6gDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAsAAAAAAAANqdoDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAAwAAAAAAAAMhl4DCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAA0AAAAAAAALj7oDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAA4AAAAAAAAKvFIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAA8AAAAAAAAKBRQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABAAAAAAAAAJZMQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABEAAAAAAAAI11IDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABIAAAAAAAAIWZQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABMAAAAAAAAH6RQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABQAAAAAAAAHg9QDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABUAAAAAAAAHKDADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABYAAAAAAAAG1OgDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABcAAAAAAAAGiOQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABgAAAAAAAAGQyoDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABkAAAAAAAAGAxADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABoAAAAAAAAFx9gDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABsAAAAAAAAFkQoDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAABwAAAAAAAAFXiQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAB0AAAAAAAAFLsIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAB4AAAAAAAAFAooDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAB8AAAAAAAAE2SwDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACAAAAAAAAAEsmIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACEAAAAAAAAEjfADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACIAAAAAAAAEa6QDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACMAAAAAAAAES0wDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACQAAAAAAAAELMoDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACUAAAAAAAAD9IoDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACYAAAAAAAAD9IoDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACcAAAAAAAAD2pADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACgAAAAAAAADweoDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACkAAAAAAAADqnADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACoAAAAAAAADlBgDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACsAAAAAAAADfsQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAACwAAAAAAAADanQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAC0AAAAAAAADVwADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAC4AAAAAAAADRHIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAC8AAAAAAAADMqIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADAAAAAAAAADIZADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADEAAAAAAAADETwDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADIAAAAAAAADAYgDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADMAAAAAAAAC8moDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADQAAAAAAAAC4+wDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADUAAAAAAAAC1fADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADYAAAAAAAACyIADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADcAAAAAAAACu5IDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADgAAAAAAAACrxIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADkAAAAAAAACowADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADoAAAAAAAACl1wDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADsAAAAAAAACjBwDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAADwAAAAAAAACgUADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAD0AAAAAAAACdr4DCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAD4AAAAAAAACbJYDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAD8AAAAAAAACYrQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEAAAAAAAAACWSwDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEEAAAAAAAACT+oDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEIAAAAAAAACRvgDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEMAAAAAAAACPkIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEQAAAAAAAACNdIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEUAAAAAAAACLZ4DCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEYAAAAAAAACJaYDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEcAAAAAAAACHeoDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEgAAAAAAAACFmADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEkAAAAAAAACDxIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEoAAAAAAAACB+wDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEsAAAAAAAACAQIDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAEwAAAAAAAAB+kADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAE0AAAAAAAAB87ADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAE4AAAAAAAAB7UgDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAE8AAAAAAAAB5wgDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFAAAAAAAAAB4PADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFEAAAAAAAAB2wADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFIAAAAAAAAB1TgDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFMAAAAAAAABz44DCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFQAAAAAAAABygwDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFUAAAAAAAABxKgDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFYAAAAAAAABv2IDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFcAAAAAAAABujoDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFgAAAAAAAABtToDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFkAAAAAAAABsE4DCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFoAAAAAAAABq4ADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFsAAAAAAAABptADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAFwAAAAAAAABojQDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAF0AAAAAAAABnbYDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAF4AAAAAAAABmUwDCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAF8AAAAAAAABlQADCQAAAAAAAAIFAAAACnByZWRpY3Rpb24AAAAAAAAAAGAAAAAAAAABlQAAAAAAAAABhqADCQAAAAAAAAIFAAAACHJvbGxUeXBlBQAAAAhST0xMT1ZFUgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAABAAAAAAAAAGVAAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAABQAAAAAAAAGVAAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAABgAAAAAAAAGZTAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAABwAAAAAAAAGdtgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAACAAAAAAAAAGiNAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAACQAAAAAAAAGm0AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAACgAAAAAAAAGrgAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAACwAAAAAAAAGwTgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAADAAAAAAAAAG1OgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAADQAAAAAAAAG6OgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAADgAAAAAAAAG/YgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAADwAAAAAAAAHEqAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAEAAAAAAAAAHKDAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAEQAAAAAAAAHPjgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAEgAAAAAAAAHVOAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAEwAAAAAAAAHbAAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAFAAAAAAAAAHg8AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAFQAAAAAAAAHnCAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAFgAAAAAAAAHtSAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAFwAAAAAAAAHzsAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAGAAAAAAAAAH6QAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAGQAAAAAAAAIBAgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAGgAAAAAAAAIH7AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAGwAAAAAAAAIPEgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAHAAAAAAAAAIWYAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAHQAAAAAAAAId6gMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAHgAAAAAAAAIlpgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAHwAAAAAAAAItngMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAIAAAAAAAAAI10gMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAIQAAAAAAAAI+QgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAIgAAAAAAAAJG+AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAIwAAAAAAAAJP6gMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAJAAAAAAAAAJZLAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAJQAAAAAAAAJitAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAJgAAAAAAAAJslgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAJwAAAAAAAAJ2vgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAKAAAAAAAAAKBQAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAKQAAAAAAAAKMHAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAKgAAAAAAAAKXXAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAKwAAAAAAAAKjAAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAALAAAAAAAAAKvEgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAALQAAAAAAAAK7kgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAALgAAAAAAAALV8AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAALwAAAAAAAALV8AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAMAAAAAAAAALj7AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAMQAAAAAAAALyagMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAMgAAAAAAAAMBiAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAMwAAAAAAAAMRPAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAANAAAAAAAAAMhkAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAANQAAAAAAAAMyogMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAANgAAAAAAAANEcgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAANwAAAAAAAANXAAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAOAAAAAAAAANqdAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAOQAAAAAAAAN+xAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAOgAAAAAAAAOUGAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAOwAAAAAAAAOqcAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAPAAAAAAAAAPB6gMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAPQAAAAAAAAPakAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAPgAAAAAAAAP0igMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAPwAAAAAAAAP0igMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAQAAAAAAAAAQsygMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAQQAAAAAAAARLTAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAQgAAAAAAAARrpAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAQwAAAAAAAASN8AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAARAAAAAAAAASyYgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAARQAAAAAAAATZLAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAARgAAAAAAAAUCigMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAARwAAAAAAAAUuwgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAASAAAAAAAAAVeJAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAASQAAAAAAAAWRCgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAASgAAAAAAAAXH2AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAASwAAAAAAAAYDEAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAATAAAAAAAAAZDKgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAATQAAAAAAAAaI5AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAATgAAAAAAAAbU6AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAATwAAAAAAAAcoMAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAUAAAAAAAAAeD1AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAUQAAAAAAAAfpFAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAUgAAAAAAAAhZlAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAUwAAAAAAAAjXUgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAVAAAAAAAAAlkxAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAVQAAAAAAAAoFFAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAVgAAAAAAAAq8UgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAVwAAAAAAAAuPugMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAWAAAAAAAAAyGXgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAWQAAAAAAAA2p2gMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAWgAAAAAAAA8HqAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAWwAAAAAAABCzKAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAXAAAAAAAABLJkgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAXQAAAAAAABV4pAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAXgAAAAAAABkMvAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAXwAAAAAAAB4PUAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAYAAAAAAAACWTJAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAYQAAAAAAADIZggMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAYgAAAAAAAEsmSAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAYwAAAAAAAJZMkAAAAAAAAAGGoAAAAAAAAAGGoAEAAAAHZGljZVdpbgAAAAMAAAAEdHlwZQAAAApwcmVkaWN0aW9uAAAABm51bWJlcgMJAAAAAAAAAgUAAAAEdHlwZQUAAAAJUk9MTFVOREVSAwkAAGcAAAACBQAAAApwcmVkaWN0aW9uBQAAAAZudW1iZXIGBwMJAAAAAAAAAgUAAAAEdHlwZQUAAAAIUk9MTE9WRVIDCQAAZwAAAAIFAAAABm51bWJlcgUAAAAKcHJlZGljdGlvbgYHBwEAAAAaVmFsaWRhdGVCZXRBbmREZWZpbmVXaW5BbXQAAAADAAAABmFtb3VudAAAAApwcmVkaWN0aW9uAAAACHJvbGxUeXBlAwMJAABmAAAAAgUAAAAGQkVUTUlOBQAAAAZhbW91bnQGCQAAZgAAAAIFAAAABmFtb3VudAUAAAAGQkVUTUFYCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAI0JldCBhbW91bnQgaXMgbm90IGluIHJhbmdlOiBtaW5CZXQ9CQABpAAAAAEJAABpAAAAAgUAAAAGQkVUTUlOBQAAAAdXQVZFTEVUAgAAAAggbWF4QmV0PQkAAaQAAAABCQAAaQAAAAIFAAAABkJFVE1BWAUAAAAHV0FWRUxFVAMDCQEAAAACIT0AAAACBQAAAAhyb2xsVHlwZQUAAAAJUk9MTFVOREVSCQEAAAACIT0AAAACBQAAAAhyb2xsVHlwZQUAAAAIUk9MTE9WRVIHCQAAAgAAAAECAAAAKUludmFsaWQgUm9sbCB0eXBlLCB0cnkgd2l0aCBPVkVSIG9yIFVOREVSAwMJAABmAAAAAgUAAAANUFJFRElDVElPTk1JTgUAAAAKcHJlZGljdGlvbgYJAABmAAAAAgUAAAAKcHJlZGljdGlvbgUAAAANUFJFRElDVElPTk1BWAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACBQcmVkaWN0aW9uIGlzIG91dCBvZiB0aGUgcmFuZ2U6IAkAAaQAAAABBQAAAA1QUkVESUNUSU9OTUlOAgAAABIgPD0gcHJlZGljdGlvbiA8PSAJAAGkAAAAAQUAAAANUFJFRElDVElPTk1BWAQAAAAFbXVsdGkJAQAAAApNdWx0aXBsaWVyAAAAAgUAAAAKcHJlZGljdGlvbgUAAAAIcm9sbFR5cGUJAABpAAAAAgkAAGgAAAACCQAAaQAAAAIJAABoAAAAAgUAAAAGYW1vdW50BQAAAAVtdWx0aQAAAAAAAAGGoAkAAGUAAAACAAAAAAAAAABkCQAAZAAAAAIFAAAAC0ZFRVdBVkVTQkVUBQAAAAlGRUVNQ0FGRUUAAAAAAAAAAGQAAAACAAAAAWkBAAAACHBsYXlEaWNlAAAAAgAAAAhyb2xsVHlwZQAAAApwcmVkaWN0aW9uBAAAAAZnYW1lSWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAAHcGF5bWVudAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAApmZWVBc3NldElkCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAAWkAAAAKZmVlQXNzZXRJZAQAAAAFbXVsdGkJAQAAAApNdWx0aXBsaWVyAAAAAgUAAAAKcHJlZGljdGlvbgUAAAAIcm9sbFR5cGUEAAAABndpbkFtdAkBAAAAGlZhbGlkYXRlQmV0QW5kRGVmaW5lV2luQW10AAAAAwgFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAApwcmVkaWN0aW9uBQAAAAhyb2xsVHlwZQQAAAANcGxheWVyQmFsYW5jZQkBAAAADHdhdmVzQmFsYW5jZQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAKZ2FtZUlkVXNlZAkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkAwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAAEV0JFVAkAAAIAAAABAgAAAB1QYXltZW50IHNob3VsZCBiZSBpbiBXYXZlc2JldAMJAABmAAAAAgAAAAAAAA9CQAUAAAANcGxheWVyQmFsYW5jZQkAAAIAAAABAgAAAEVUaGVyZSBhcmUgbm90IGVub3VnaCB3YXZlcywgaXQgdGFrZXMgMC4wMSBXYXZlcyB0byBiZXQuIEdhbWUgYWJvcnRlZC4DBQAAAApmZWVBc3NldElkCQAAAgAAAAECAAAAMVRyYW5zYWN0aW9uJ3MgZmVlIG11c3QgYmUgaW4gV2F2ZXMuIEdhbWUgYWJvcnRlZC4DBQAAAApnYW1lSWRVc2VkCQAAAgAAAAECAAAAMVBhc3NlZCBnYW1lSWQgaGFkIGJlZW4gdXNlZCBiZWZvcmUuIEdhbWUgYWJvcnRlZC4EAAAACm5ld0dhbWVOdW0JAQAAABBJbmNyZW1lbnRHYW1lTnVtAAAAAAQAAAAOcGxheWVyUHViS2V5NTgJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAtnYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAABgUAAAAOU1RBVEVTVUJNSVRURUQFAAAACnByZWRpY3Rpb24FAAAACHJvbGxUeXBlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAAGd2luQW10AgAAAAAJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5SRVNFUlZBVElPTktFWQkBAAAAHlZhbGlkYXRlQW5kSW5jcmVhc2VSZXNlcnZlZEFtdAAAAAEFAAAABndpbkFtdAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAPR0FNRVNDT1VOVEVSS0VZBQAAAApuZXdHYW1lTnVtCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAAC2dhbWVEYXRhU3RyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAAA25pbAAAAAFpAQAAAAh3aXRoZHJhdwAAAAIAAAAGZ2FtZUlkAAAABnJzYVNpZwQAAAAMZ2FtZURhdGFMaXN0CQEAAAATRXh0cmFjdEdhbWVEYXRhTGlzdAAAAAEFAAAABmdhbWVJZAQAAAAJZ2FtZVN0YXRlCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAMSWR4R2FtZVN0YXRlBAAAAApwcmVkaWN0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAA1JZHhQcmVkaWN0aW9uBAAAAAhyb2xsVHlwZQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAB0lkeFR5cGUEAAAABndpbkFtdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAJSWR4V2luQW10BAAAAA5wbGF5ZXJQdWJLZXk1OAkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAEUlkeFBsYXllclB1YktleTU4BAAAAA1wbGF5ZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAADnBsYXllclB1YktleTU4BAAAABFkZWNyZWFzZWRSZXNlcnZlcwkBAAAAE0RlY3JlYXNlUmVzZXJ2ZWRBbXQAAAACBQAAAAZnYW1lSWQFAAAABndpbkFtdAMJAQAAAAIhPQAAAAIFAAAACWdhbWVTdGF0ZQUAAAAOU1RBVEVTVUJNSVRURUQJAAACAAAAAQIAAAAzSW52YWxpZCBnYW1lIHN0YXRlIGZvciBwYXNzZWQgZ2FtZUlkLiBHYW1lIGFib3J0ZWQuBAAAAARyYW5kCQEAAAAPR2VuZXJhdGVSYW5kSW50AAAAAgUAAAAGZ2FtZUlkBQAAAAZyc2FTaWcEAAAAB3JhbmRTdHIJAQAAAAlSYW5kVG9TdHIAAAABBQAAAARyYW5kAwkBAAAAB2RpY2VXaW4AAAADBQAAAAhyb2xsVHlwZQUAAAAKcHJlZGljdGlvbgUAAAAEcmFuZAQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACFNUQVRFV09OBQAAAApwcmVkaWN0aW9uBQAAAAhyb2xsVHlwZQUAAAAOcGxheWVyUHViS2V5NTgFAAAABndpbkFtdAUAAAAHcmFuZFN0cgkBAAAADFdpblNjcmlwdFNldAAAAAUFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwUAAAAGd2luQW10BQAAAA5uZXdHYW1lRGF0YVN0cgUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAGBQAAAAlTVEFURUxPU1QFAAAACnByZWRpY3Rpb24FAAAACHJvbGxUeXBlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAAGd2luQW10BQAAAAdyYW5kU3RyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyCQAETAAAAAIFAAAAEWRlY3JlYXNlZFJlc2VydmVzBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDAJAABnAAAAAgkAAGUAAAACCQAD6wAAAAIFAAAABHRoaXMFAAAABFdCRVQIBQAAAAN0dHgAAAAGYW1vdW50CQEAAAASRXh0cmFjdFJlc2VydmVkQW10AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAA3N0eAUAAAAHJG1hdGNoMAYHB0NA2Kc=", "chainId": 84, "height": 739466, "spentComplexity": 0 } View: original | compacted Prev: 6TN2UzpqopB3uUh2yy3JFYP8b1zyZEENLuwLShTAgsfL Next: FwfpqDPfs3EvW1znFgeaBgWkz9oSo2YyLTkwEc4xbs2w Diff:
OldNewDifferences
55
66 let GAMESCOUNTERKEY = "$GAME_NUM"
77
8+let RESERVATIONKEY = "$RESERVED_AMOUNT"
9+
810 let WBET = base58'23vgV9p9pD83A7CFbsDEc4zjanep7UeFo4ZRS6oGorhv'
11+
12+let WAVELET = 100000000
913
1014 let FEEWAVESBET = 4
1115
1216 let FEEMCAFEE = 2
1317
14-let WAVELET = 100000000
18+let STATESUBMITTED = "SUBMITTED"
1519
1620 let STATEWON = "WON"
1721
2933
3034 let PREDICTIONMAX = 99
3135
36+let IdxGameState = 0
37+
38+let IdxPrediction = 1
39+
40+let IdxType = 2
41+
42+let IdxPlayerPubKey58 = 3
43+
44+let IdxWinAmt = 4
45+
46+let IdxRandOrEmpty = 5
47+
3248 func IncrementGameNum () = {
3349 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
3450 case num: Int =>
3753 0
3854 }
3955 (gameNum + 1)
56+ }
57+
58+
59+func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
60+ case a: Int =>
61+ a
62+ case _ =>
63+ 0
64+}
65+
66+
67+func ValidateAndIncreaseReservedAmt (winAmt) = {
68+ let newReservedAmount = (ExtractReservedAmt() + winAmt)
69+ let balance = assetBalance(this, WBET)
70+ if ((newReservedAmount > balance))
71+ then throw("Insufficient funds on Wavesbet Dice account. Transaction was rejected for your safety.")
72+ else newReservedAmount
73+ }
74+
75+
76+func FormatGameDataParam (p) = {
77+ let s = size(p)
78+ if ((s == 0))
79+ then throw("Parameter size must be greater then 0")
80+ else if ((s > 99))
81+ then throw("Parameter size must be less then 100")
82+ else if ((10 > s))
83+ then (("0" + toString(s)) + p)
84+ else (toString(s) + p)
85+ }
86+
87+
88+func FormatGameDataStr (gameState,prediction,typeRoll,playerPubKey58,winAmt,randOrEmpty) = {
89+ let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(toString(prediction))) + "_") + FormatGameDataParam(typeRoll)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(winAmt)))
90+ if ((randOrEmpty == ""))
91+ then fullStateStr
92+ else ((fullStateStr + "_") + FormatGameDataParam(randOrEmpty))
93+ }
94+
95+
96+func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
97+ then drop(remaining, 1)
98+ else remaining
99+
100+
101+func ParseNextAttribute (remaining) = {
102+ let s = size(remaining)
103+ if ((s > 0))
104+ then {
105+ let nn = parseIntValue(take(remaining, 2))
106+ let v = take(drop(remaining, 2), nn)
107+ let tmpRemaining = drop(remaining, (nn + 2))
108+ let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
109+[v, remainingState]
110+ }
111+ else throw("Empty string was passed into parseNextAttribute func")
112+ }
113+
114+
115+func ParseGameRawDataStr (rawStateStr) = {
116+ let gameState = ParseNextAttribute(rawStateStr)
117+ let prediction = ParseNextAttribute(gameState[1])
118+ let rollType = ParseNextAttribute(prediction[1])
119+ let playerPubKey58 = ParseNextAttribute(rollType[1])
120+ let winAmt = ParseNextAttribute(playerPubKey58[1])
121+[gameState[0], prediction[0], rollType[0], playerPubKey58[0], winAmt[0]]
122+ }
123+
124+
125+func ExtractGameDataList (gameId) = {
126+ let rawDataStr = match getString(this, gameId) {
127+ case str: String =>
128+ str
129+ case _ =>
130+ throw(("Couldn't find game by " + gameId))
131+ }
132+ ParseGameRawDataStr(rawDataStr)
133+ }
134+
135+
136+func DecreaseReservedAmt (gameId,winAmt) = {
137+ let newReservedAmount = (ExtractReservedAmt() - winAmt)
138+ if ((0 > newReservedAmount))
139+ then throw("Invalid Dice Roller account state - reserved amount is less than 0")
140+ else DataEntry(RESERVATIONKEY, newReservedAmount)
40141 }
41142
42143
58159 else false)
59160 then toString(r)
60161 else throw(("Unsupported r parameter passed: expected=[1,...,100] actual=" + toString(r)))
162+
163+
164+func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,decreasedReserves) = {
165+ let wSetCommonData = [decreasedReserves]
166+ let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, WBET)]
167+ let gameData = DataEntry(gameId, newGameDataStr)
168+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
169+ }
61170
62171
63172 func Multiplier (prediction,rollType) = if ((rollType == ROLLUNDER))
451560 else 100000
452561
453562
454-func diceWin (type,prediction,rand) = if ((type == ROLLUNDER))
455- then if ((prediction >= rand))
563+func diceWin (type,prediction,number) = if ((type == ROLLUNDER))
564+ then if ((prediction >= number))
456565 then true
457566 else false
458567 else if ((type == ROLLOVER))
459- then if ((rand >= prediction))
568+ then if ((number >= prediction))
460569 then true
461570 else false
462571 else false
481590
482591
483592 @Callable(i)
484-func playDice (rollType,prediction,rsaSig) = {
593+func playDice (rollType,prediction) = {
485594 let gameId = toBase58String(i.transactionId)
486595 let payment = extract(i.payment)
487596 let feeAssetId = isDefined(i.feeAssetId)
597+ let multi = Multiplier(prediction, rollType)
598+ let winAmt = ValidateBetAndDefineWinAmt(payment.amount, prediction, rollType)
488599 let playerBalance = wavesBalance(i.caller)
489600 let gameIdUsed = isDefined(getString(this, gameId))
490601 if ((payment.assetId != WBET))
491- then throw("Payment should be in Wavesbet. Game aborted.")
492- else if ((500000 > playerBalance))
493- then throw("There are not enough waves, it takes 0.005 Waves to bet. Game aborted.")
602+ then throw("Payment should be in Wavesbet")
603+ else if ((1000000 > playerBalance))
604+ then throw("There are not enough waves, it takes 0.01 Waves to bet. Game aborted.")
494605 else if (feeAssetId)
495606 then throw("Transaction's fee must be in Waves. Game aborted.")
496607 else if (gameIdUsed)
497608 then throw("Passed gameId had been used before. Game aborted.")
498609 else {
499- let rand = GenerateRandInt(gameId, rsaSig)
500- let randStr = RandToStr(rand)
501- let result = diceWin(rollType, prediction, rand)
502- let winAmt = if (result)
503- then ValidateBetAndDefineWinAmt(payment.amount, prediction, rollType)
504- else 0
505610 let newGameNum = IncrementGameNum()
506- let betData = WriteSet([DataEntry(gameId, if (result)
507- then STATEWON
508- else STATELOST), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry("random", rand), DataEntry("payment", payment.amount), DataEntry("payout", winAmt)])
509- if (result)
510- then ScriptResult(betData, TransferSet([ScriptTransfer(i.caller, winAmt, WBET)]))
511- else ScriptResult(betData, TransferSet(nil))
611+ let playerPubKey58 = toBase58String(i.callerPublicKey)
612+ let gameDataStr = FormatGameDataStr(STATESUBMITTED, prediction, rollType, playerPubKey58, winAmt, "")
613+ ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet(nil))
512614 }
513615 }
514616
617+
618+
619+@Callable(i)
620+func withdraw (gameId,rsaSig) = {
621+ let gameDataList = ExtractGameDataList(gameId)
622+ let gameState = gameDataList[IdxGameState]
623+ let prediction = parseIntValue(gameDataList[IdxPrediction])
624+ let rollType = gameDataList[IdxType]
625+ let winAmt = parseIntValue(gameDataList[IdxWinAmt])
626+ let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
627+ let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
628+ let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
629+ if ((gameState != STATESUBMITTED))
630+ then throw("Invalid game state for passed gameId. Game aborted.")
631+ else {
632+ let rand = GenerateRandInt(gameId, rsaSig)
633+ let randStr = RandToStr(rand)
634+ if (diceWin(rollType, prediction, rand))
635+ then {
636+ let newGameDataStr = FormatGameDataStr(STATEWON, prediction, rollType, playerPubKey58, winAmt, randStr)
637+ WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, decreasedReserves)
638+ }
639+ else {
640+ let newGameDataStr = FormatGameDataStr(STATELOST, prediction, rollType, playerPubKey58, winAmt, randStr)
641+ WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
642+ }
643+ }
644+ }
645+
646+
647+@Verifier(tx)
648+func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
649+ then match tx {
650+ case ttx: TransferTransaction =>
651+ ((assetBalance(this, WBET) - ttx.amount) >= ExtractReservedAmt())
652+ case stx: SetScriptTransaction =>
653+ true
654+ case _ =>
655+ false
656+ }
657+ else false
515658
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg4dAR6XbBDAS9hr/Ej3dJv6Ffc466x/mOGMWU3lrABs3qa8BHmuJGnkfbpEf2vAwYTOWPvvzfM10OBbfloSyq3c9MKvyTe1luBLGqW4vZUXIyvSgz1liyUVefIQy3dyF9jbeTZbC0bbcT/7O3DEL+01z6A+rDCacSZ0lGolSQ6AnhLxzIkVpOQJbrBmC+x+ZuZPCMWzJynd5aeOn7jaj/mkRVyxe6g/0OhWz4NiiZXeuMRB+8mKy0fWD/UlIlZWHsAS2ZmrkXKqjLq0/0wr8ILJkznjSqdnI5Ibjg3uQrj/4AN+i9r28aQ73/ZkPtY5Sbw0AOiABBu7gHmq9ayVxZQIDAQAB")
55
66 let GAMESCOUNTERKEY = "$GAME_NUM"
77
8+let RESERVATIONKEY = "$RESERVED_AMOUNT"
9+
810 let WBET = base58'23vgV9p9pD83A7CFbsDEc4zjanep7UeFo4ZRS6oGorhv'
11+
12+let WAVELET = 100000000
913
1014 let FEEWAVESBET = 4
1115
1216 let FEEMCAFEE = 2
1317
14-let WAVELET = 100000000
18+let STATESUBMITTED = "SUBMITTED"
1519
1620 let STATEWON = "WON"
1721
1822 let STATELOST = "LOST"
1923
2024 let ROLLUNDER = "UNDER"
2125
2226 let ROLLOVER = "OVER"
2327
2428 let BETMIN = (100 * WAVELET)
2529
2630 let BETMAX = (20000000 * WAVELET)
2731
2832 let PREDICTIONMIN = 1
2933
3034 let PREDICTIONMAX = 99
3135
36+let IdxGameState = 0
37+
38+let IdxPrediction = 1
39+
40+let IdxType = 2
41+
42+let IdxPlayerPubKey58 = 3
43+
44+let IdxWinAmt = 4
45+
46+let IdxRandOrEmpty = 5
47+
3248 func IncrementGameNum () = {
3349 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
3450 case num: Int =>
3551 num
3652 case _ =>
3753 0
3854 }
3955 (gameNum + 1)
56+ }
57+
58+
59+func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
60+ case a: Int =>
61+ a
62+ case _ =>
63+ 0
64+}
65+
66+
67+func ValidateAndIncreaseReservedAmt (winAmt) = {
68+ let newReservedAmount = (ExtractReservedAmt() + winAmt)
69+ let balance = assetBalance(this, WBET)
70+ if ((newReservedAmount > balance))
71+ then throw("Insufficient funds on Wavesbet Dice account. Transaction was rejected for your safety.")
72+ else newReservedAmount
73+ }
74+
75+
76+func FormatGameDataParam (p) = {
77+ let s = size(p)
78+ if ((s == 0))
79+ then throw("Parameter size must be greater then 0")
80+ else if ((s > 99))
81+ then throw("Parameter size must be less then 100")
82+ else if ((10 > s))
83+ then (("0" + toString(s)) + p)
84+ else (toString(s) + p)
85+ }
86+
87+
88+func FormatGameDataStr (gameState,prediction,typeRoll,playerPubKey58,winAmt,randOrEmpty) = {
89+ let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(toString(prediction))) + "_") + FormatGameDataParam(typeRoll)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(winAmt)))
90+ if ((randOrEmpty == ""))
91+ then fullStateStr
92+ else ((fullStateStr + "_") + FormatGameDataParam(randOrEmpty))
93+ }
94+
95+
96+func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
97+ then drop(remaining, 1)
98+ else remaining
99+
100+
101+func ParseNextAttribute (remaining) = {
102+ let s = size(remaining)
103+ if ((s > 0))
104+ then {
105+ let nn = parseIntValue(take(remaining, 2))
106+ let v = take(drop(remaining, 2), nn)
107+ let tmpRemaining = drop(remaining, (nn + 2))
108+ let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
109+[v, remainingState]
110+ }
111+ else throw("Empty string was passed into parseNextAttribute func")
112+ }
113+
114+
115+func ParseGameRawDataStr (rawStateStr) = {
116+ let gameState = ParseNextAttribute(rawStateStr)
117+ let prediction = ParseNextAttribute(gameState[1])
118+ let rollType = ParseNextAttribute(prediction[1])
119+ let playerPubKey58 = ParseNextAttribute(rollType[1])
120+ let winAmt = ParseNextAttribute(playerPubKey58[1])
121+[gameState[0], prediction[0], rollType[0], playerPubKey58[0], winAmt[0]]
122+ }
123+
124+
125+func ExtractGameDataList (gameId) = {
126+ let rawDataStr = match getString(this, gameId) {
127+ case str: String =>
128+ str
129+ case _ =>
130+ throw(("Couldn't find game by " + gameId))
131+ }
132+ ParseGameRawDataStr(rawDataStr)
133+ }
134+
135+
136+func DecreaseReservedAmt (gameId,winAmt) = {
137+ let newReservedAmount = (ExtractReservedAmt() - winAmt)
138+ if ((0 > newReservedAmount))
139+ then throw("Invalid Dice Roller account state - reserved amount is less than 0")
140+ else DataEntry(RESERVATIONKEY, newReservedAmount)
40141 }
41142
42143
43144 func GenerateRandInt (gameId,rsaSign) = {
44145 let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
45146 if (rsaSigValid)
46147 then {
47148 let rand = (toInt(sha256(rsaSign)) % 100)
48149 if ((0 > rand))
49150 then ((-1 * rand) + 1)
50151 else (rand + 1)
51152 }
52153 else throw("Invalid RSA signature")
53154 }
54155
55156
56157 func RandToStr (r) = if (if ((r >= 1))
57158 then (100 >= r)
58159 else false)
59160 then toString(r)
60161 else throw(("Unsupported r parameter passed: expected=[1,...,100] actual=" + toString(r)))
162+
163+
164+func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,decreasedReserves) = {
165+ let wSetCommonData = [decreasedReserves]
166+ let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, WBET)]
167+ let gameData = DataEntry(gameId, newGameDataStr)
168+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
169+ }
61170
62171
63172 func Multiplier (prediction,rollType) = if ((rollType == ROLLUNDER))
64173 then if ((prediction == 1))
65174 then 9850000
66175 else if ((prediction == 2))
67176 then 4925000
68177 else if ((prediction == 3))
69178 then 3283330
70179 else if ((prediction == 4))
71180 then 2462500
72181 else if ((prediction == 5))
73182 then 1970000
74183 else if ((prediction == 6))
75184 then 1641660
76185 else if ((prediction == 7))
77186 then 1407140
78187 else if ((prediction == 8))
79188 then 1231250
80189 else if ((prediction == 9))
81190 then 1094440
82191 else if ((prediction == 10))
83192 then 985000
84193 else if ((prediction == 11))
85194 then 895450
86195 else if ((prediction == 12))
87196 then 820830
88197 else if ((prediction == 13))
89198 then 757690
90199 else if ((prediction == 14))
91200 then 703570
92201 else if ((prediction == 15))
93202 then 656660
94203 else if ((prediction == 16))
95204 then 615620
96205 else if ((prediction == 17))
97206 then 579410
98207 else if ((prediction == 18))
99208 then 547220
100209 else if ((prediction == 19))
101210 then 518420
102211 else if ((prediction == 20))
103212 then 492500
104213 else if ((prediction == 21))
105214 then 469040
106215 else if ((prediction == 22))
107216 then 447720
108217 else if ((prediction == 23))
109218 then 428260
110219 else if ((prediction == 24))
111220 then 410410
112221 else if ((prediction == 25))
113222 then 394000
114223 else if ((prediction == 26))
115224 then 378840
116225 else if ((prediction == 27))
117226 then 364810
118227 else if ((prediction == 28))
119228 then 351780
120229 else if ((prediction == 29))
121230 then 339650
122231 else if ((prediction == 30))
123232 then 328330
124233 else if ((prediction == 31))
125234 then 317740
126235 else if ((prediction == 32))
127236 then 307810
128237 else if ((prediction == 33))
129238 then 298480
130239 else if ((prediction == 34))
131240 then 289700
132241 else if ((prediction == 35))
133242 then 281420
134243 else if ((prediction == 36))
135244 then 273610
136245 else if ((prediction == 37))
137246 then 259210
138247 else if ((prediction == 38))
139248 then 259210
140249 else if ((prediction == 39))
141250 then 252560
142251 else if ((prediction == 40))
143252 then 246250
144253 else if ((prediction == 41))
145254 then 240240
146255 else if ((prediction == 42))
147256 then 234520
148257 else if ((prediction == 43))
149258 then 229060
150259 else if ((prediction == 44))
151260 then 223860
152261 else if ((prediction == 45))
153262 then 218880
154263 else if ((prediction == 46))
155264 then 214130
156265 else if ((prediction == 47))
157266 then 209570
158267 else if ((prediction == 48))
159268 then 205200
160269 else if ((prediction == 49))
161270 then 201020
162271 else if ((prediction == 50))
163272 then 197000
164273 else if ((prediction == 51))
165274 then 193130
166275 else if ((prediction == 52))
167276 then 189420
168277 else if ((prediction == 53))
169278 then 185840
170279 else if ((prediction == 54))
171280 then 182400
172281 else if ((prediction == 55))
173282 then 179090
174283 else if ((prediction == 56))
175284 then 175890
176285 else if ((prediction == 57))
177286 then 172800
178287 else if ((prediction == 58))
179288 then 169820
180289 else if ((prediction == 59))
181290 then 166940
182291 else if ((prediction == 60))
183292 then 164160
184293 else if ((prediction == 61))
185294 then 161470
186295 else if ((prediction == 62))
187296 then 158870
188297 else if ((prediction == 63))
189298 then 156340
190299 else if ((prediction == 64))
191300 then 153900
192301 else if ((prediction == 65))
193302 then 151530
194303 else if ((prediction == 66))
195304 then 149240
196305 else if ((prediction == 67))
197306 then 147010
198307 else if ((prediction == 68))
199308 then 144850
200309 else if ((prediction == 69))
201310 then 142750
202311 else if ((prediction == 70))
203312 then 140710
204313 else if ((prediction == 71))
205314 then 138730
206315 else if ((prediction == 72))
207316 then 136800
208317 else if ((prediction == 73))
209318 then 134930
210319 else if ((prediction == 74))
211320 then 133100
212321 else if ((prediction == 75))
213322 then 131330
214323 else if ((prediction == 76))
215324 then 129600
216325 else if ((prediction == 77))
217326 then 127920
218327 else if ((prediction == 78))
219328 then 126280
220329 else if ((prediction == 79))
221330 then 124680
222331 else if ((prediction == 80))
223332 then 123120
224333 else if ((prediction == 81))
225334 then 121600
226335 else if ((prediction == 82))
227336 then 120120
228337 else if ((prediction == 83))
229338 then 118670
230339 else if ((prediction == 84))
231340 then 117260
232341 else if ((prediction == 85))
233342 then 115880
234343 else if ((prediction == 86))
235344 then 114530
236345 else if ((prediction == 87))
237346 then 113210
238347 else if ((prediction == 88))
239348 then 111930
240349 else if ((prediction == 89))
241350 then 110670
242351 else if ((prediction == 90))
243352 then 109440
244353 else if ((prediction == 91))
245354 then 108240
246355 else if ((prediction == 92))
247356 then 107060
248357 else if ((prediction == 93))
249358 then 105910
250359 else if ((prediction == 94))
251360 then 104780
252361 else if ((prediction == 95))
253362 then 103680
254363 else if ((prediction == 96))
255364 then 103680
256365 else 100000
257366 else if ((rollType == ROLLOVER))
258367 then if ((prediction == 4))
259368 then 103680
260369 else if ((prediction == 5))
261370 then 103680
262371 else if ((prediction == 6))
263372 then 104780
264373 else if ((prediction == 7))
265374 then 105910
266375 else if ((prediction == 8))
267376 then 107060
268377 else if ((prediction == 9))
269378 then 108240
270379 else if ((prediction == 10))
271380 then 109440
272381 else if ((prediction == 11))
273382 then 110670
274383 else if ((prediction == 12))
275384 then 111930
276385 else if ((prediction == 13))
277386 then 113210
278387 else if ((prediction == 14))
279388 then 114530
280389 else if ((prediction == 15))
281390 then 115880
282391 else if ((prediction == 16))
283392 then 117260
284393 else if ((prediction == 17))
285394 then 118670
286395 else if ((prediction == 18))
287396 then 120120
288397 else if ((prediction == 19))
289398 then 121600
290399 else if ((prediction == 20))
291400 then 123120
292401 else if ((prediction == 21))
293402 then 124680
294403 else if ((prediction == 22))
295404 then 126280
296405 else if ((prediction == 23))
297406 then 127920
298407 else if ((prediction == 24))
299408 then 129600
300409 else if ((prediction == 25))
301410 then 131330
302411 else if ((prediction == 26))
303412 then 133100
304413 else if ((prediction == 27))
305414 then 134930
306415 else if ((prediction == 28))
307416 then 136800
308417 else if ((prediction == 29))
309418 then 138730
310419 else if ((prediction == 30))
311420 then 140710
312421 else if ((prediction == 31))
313422 then 142750
314423 else if ((prediction == 32))
315424 then 144850
316425 else if ((prediction == 33))
317426 then 147010
318427 else if ((prediction == 34))
319428 then 149240
320429 else if ((prediction == 35))
321430 then 151530
322431 else if ((prediction == 36))
323432 then 153900
324433 else if ((prediction == 37))
325434 then 156340
326435 else if ((prediction == 38))
327436 then 158870
328437 else if ((prediction == 39))
329438 then 161470
330439 else if ((prediction == 40))
331440 then 164160
332441 else if ((prediction == 41))
333442 then 166940
334443 else if ((prediction == 42))
335444 then 169820
336445 else if ((prediction == 43))
337446 then 172800
338447 else if ((prediction == 44))
339448 then 175890
340449 else if ((prediction == 45))
341450 then 179090
342451 else if ((prediction == 46))
343452 then 185840
344453 else if ((prediction == 47))
345454 then 185840
346455 else if ((prediction == 48))
347456 then 189420
348457 else if ((prediction == 49))
349458 then 193130
350459 else if ((prediction == 50))
351460 then 197000
352461 else if ((prediction == 51))
353462 then 201020
354463 else if ((prediction == 52))
355464 then 205200
356465 else if ((prediction == 53))
357466 then 209570
358467 else if ((prediction == 54))
359468 then 214130
360469 else if ((prediction == 55))
361470 then 218880
362471 else if ((prediction == 56))
363472 then 223860
364473 else if ((prediction == 57))
365474 then 229060
366475 else if ((prediction == 58))
367476 then 234520
368477 else if ((prediction == 59))
369478 then 240240
370479 else if ((prediction == 60))
371480 then 246250
372481 else if ((prediction == 61))
373482 then 252560
374483 else if ((prediction == 62))
375484 then 259210
376485 else if ((prediction == 63))
377486 then 259210
378487 else if ((prediction == 64))
379488 then 273610
380489 else if ((prediction == 65))
381490 then 281420
382491 else if ((prediction == 66))
383492 then 289700
384493 else if ((prediction == 67))
385494 then 298480
386495 else if ((prediction == 68))
387496 then 307810
388497 else if ((prediction == 69))
389498 then 317740
390499 else if ((prediction == 70))
391500 then 328330
392501 else if ((prediction == 71))
393502 then 339650
394503 else if ((prediction == 72))
395504 then 351780
396505 else if ((prediction == 73))
397506 then 364810
398507 else if ((prediction == 74))
399508 then 378840
400509 else if ((prediction == 75))
401510 then 394000
402511 else if ((prediction == 76))
403512 then 410410
404513 else if ((prediction == 77))
405514 then 428260
406515 else if ((prediction == 78))
407516 then 447720
408517 else if ((prediction == 79))
409518 then 469040
410519 else if ((prediction == 80))
411520 then 492500
412521 else if ((prediction == 81))
413522 then 518420
414523 else if ((prediction == 82))
415524 then 547220
416525 else if ((prediction == 83))
417526 then 579410
418527 else if ((prediction == 84))
419528 then 615620
420529 else if ((prediction == 85))
421530 then 656660
422531 else if ((prediction == 86))
423532 then 703570
424533 else if ((prediction == 87))
425534 then 757690
426535 else if ((prediction == 88))
427536 then 820830
428537 else if ((prediction == 89))
429538 then 895450
430539 else if ((prediction == 90))
431540 then 985000
432541 else if ((prediction == 91))
433542 then 1094440
434543 else if ((prediction == 92))
435544 then 1231250
436545 else if ((prediction == 93))
437546 then 1407140
438547 else if ((prediction == 94))
439548 then 1641660
440549 else if ((prediction == 95))
441550 then 1970000
442551 else if ((prediction == 96))
443552 then 2462500
444553 else if ((prediction == 97))
445554 then 3283330
446555 else if ((prediction == 98))
447556 then 4925000
448557 else if ((prediction == 99))
449558 then 9850000
450559 else 100000
451560 else 100000
452561
453562
454-func diceWin (type,prediction,rand) = if ((type == ROLLUNDER))
455- then if ((prediction >= rand))
563+func diceWin (type,prediction,number) = if ((type == ROLLUNDER))
564+ then if ((prediction >= number))
456565 then true
457566 else false
458567 else if ((type == ROLLOVER))
459- then if ((rand >= prediction))
568+ then if ((number >= prediction))
460569 then true
461570 else false
462571 else false
463572
464573
465574 func ValidateBetAndDefineWinAmt (amount,prediction,rollType) = if (if ((BETMIN > amount))
466575 then true
467576 else (amount > BETMAX))
468577 then throw(((("Bet amount is not in range: minBet=" + toString((BETMIN / WAVELET))) + " maxBet=") + toString((BETMAX / WAVELET))))
469578 else if (if ((rollType != ROLLUNDER))
470579 then (rollType != ROLLOVER)
471580 else false)
472581 then throw("Invalid Roll type, try with OVER or UNDER")
473582 else if (if ((PREDICTIONMIN > prediction))
474583 then true
475584 else (prediction > PREDICTIONMAX))
476585 then throw(((("Prediction is out of the range: " + toString(PREDICTIONMIN)) + " <= prediction <= ") + toString(PREDICTIONMAX)))
477586 else {
478587 let multi = Multiplier(prediction, rollType)
479588 ((((amount * multi) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
480589 }
481590
482591
483592 @Callable(i)
484-func playDice (rollType,prediction,rsaSig) = {
593+func playDice (rollType,prediction) = {
485594 let gameId = toBase58String(i.transactionId)
486595 let payment = extract(i.payment)
487596 let feeAssetId = isDefined(i.feeAssetId)
597+ let multi = Multiplier(prediction, rollType)
598+ let winAmt = ValidateBetAndDefineWinAmt(payment.amount, prediction, rollType)
488599 let playerBalance = wavesBalance(i.caller)
489600 let gameIdUsed = isDefined(getString(this, gameId))
490601 if ((payment.assetId != WBET))
491- then throw("Payment should be in Wavesbet. Game aborted.")
492- else if ((500000 > playerBalance))
493- then throw("There are not enough waves, it takes 0.005 Waves to bet. Game aborted.")
602+ then throw("Payment should be in Wavesbet")
603+ else if ((1000000 > playerBalance))
604+ then throw("There are not enough waves, it takes 0.01 Waves to bet. Game aborted.")
494605 else if (feeAssetId)
495606 then throw("Transaction's fee must be in Waves. Game aborted.")
496607 else if (gameIdUsed)
497608 then throw("Passed gameId had been used before. Game aborted.")
498609 else {
499- let rand = GenerateRandInt(gameId, rsaSig)
500- let randStr = RandToStr(rand)
501- let result = diceWin(rollType, prediction, rand)
502- let winAmt = if (result)
503- then ValidateBetAndDefineWinAmt(payment.amount, prediction, rollType)
504- else 0
505610 let newGameNum = IncrementGameNum()
506- let betData = WriteSet([DataEntry(gameId, if (result)
507- then STATEWON
508- else STATELOST), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry("random", rand), DataEntry("payment", payment.amount), DataEntry("payout", winAmt)])
509- if (result)
510- then ScriptResult(betData, TransferSet([ScriptTransfer(i.caller, winAmt, WBET)]))
511- else ScriptResult(betData, TransferSet(nil))
611+ let playerPubKey58 = toBase58String(i.callerPublicKey)
612+ let gameDataStr = FormatGameDataStr(STATESUBMITTED, prediction, rollType, playerPubKey58, winAmt, "")
613+ ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet(nil))
512614 }
513615 }
514616
617+
618+
619+@Callable(i)
620+func withdraw (gameId,rsaSig) = {
621+ let gameDataList = ExtractGameDataList(gameId)
622+ let gameState = gameDataList[IdxGameState]
623+ let prediction = parseIntValue(gameDataList[IdxPrediction])
624+ let rollType = gameDataList[IdxType]
625+ let winAmt = parseIntValue(gameDataList[IdxWinAmt])
626+ let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
627+ let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
628+ let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
629+ if ((gameState != STATESUBMITTED))
630+ then throw("Invalid game state for passed gameId. Game aborted.")
631+ else {
632+ let rand = GenerateRandInt(gameId, rsaSig)
633+ let randStr = RandToStr(rand)
634+ if (diceWin(rollType, prediction, rand))
635+ then {
636+ let newGameDataStr = FormatGameDataStr(STATEWON, prediction, rollType, playerPubKey58, winAmt, randStr)
637+ WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, decreasedReserves)
638+ }
639+ else {
640+ let newGameDataStr = FormatGameDataStr(STATELOST, prediction, rollType, playerPubKey58, winAmt, randStr)
641+ WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
642+ }
643+ }
644+ }
645+
646+
647+@Verifier(tx)
648+func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
649+ then match tx {
650+ case ttx: TransferTransaction =>
651+ ((assetBalance(this, WBET) - ttx.amount) >= ExtractReservedAmt())
652+ case stx: SetScriptTransaction =>
653+ true
654+ case _ =>
655+ false
656+ }
657+ else false
515658

github/deemru/w8io/873ac7e 
80.76 ms