tx · 7sNCiVPqP94QYCPtbLXWj45rECzLvTRjr7gf8jk4XrXL

3Mw8EHDvHCbzm6VE777G6EJNQBEe6CeS335:  -0.02000000 Waves

2024.11.11 22:22 [3367202] smart account 3Mw8EHDvHCbzm6VE777G6EJNQBEe6CeS335 > SELF 0.00000000 Waves

{ "type": 13, "id": "7sNCiVPqP94QYCPtbLXWj45rECzLvTRjr7gf8jk4XrXL", "fee": 2000000, "feeAssetId": null, "timestamp": 1731352988850, "version": 2, "chainId": 84, "sender": "3Mw8EHDvHCbzm6VE777G6EJNQBEe6CeS335", "senderPublicKey": "4f2Ggz6CqZhqr3FaW8dzR6KoddCudvULpuUfh7ew3Yne", "proofs": [ "2p5YjudkTUK3uVAJdAXPrpqv8XzdBSgZhYiyPTrvCGq8ofeLdCMQNTvTSccocMobxwer2Fx3XUXv8cVYtq5UTp3q" ], "script": "base64:BgIZCAISAwoBCBIAEgMKAQgSAwoBCBIECgIICCoBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkAAgEJAKwCAgIpUkFJOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50LCBidXQgZ290OiAFBnN0cmluZwkAAgECHlJBSTogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEJYXNCb29sZWFuAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQHYm9vbGVhbgUHJG1hdGNoMAUHYm9vbGVhbgkAAgECIkZBQjogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEJvb2xlYW4BB2dldEJvb2wBA2tleQQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzAwkAAQIFByRtYXRjaDACA0ludAQBcwUHJG1hdGNoMAkAAgECJndyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcsIGdvdDogSW50AwkAAQIFByRtYXRjaDACBFVuaXQEAXMFByRtYXRjaDAJAAIBAid3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nLCBnb3Q6IFVuaXQJAAIBAhx3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nAQlpc1Rlc3RFbnYACQEHZ2V0Qm9vbAECB1RFU1RFTlYBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAIUc3RhdGljX29yYWNsZUFkZHJlc3MBEnN0YXRpY0tleV9leHRyYUZlZQACD3N0YXRpY19leHRyYUZlZQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAhRzdGF0aWNfZmVlQWdncmVnYXRvcgEgc3RhdGljS2V5X2NhbmluZUluY3ViYXRvckFkZHJlc3MAAh1zdGF0aWNfY2FuaW5lSW5jdWJhdG9yQWRkcmVzcwEec3RhdGljS2V5X2NhbmluZUJyZWVkZXJBZGRyZXNzAAIbc3RhdGljX2NhbmluZUJyZWVkZXJBZGRyZXNzARhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAAhVzdGF0aWNfY291cG9uc0FkZHJlc3MBHnN0YXRpY0tleV9jYW5pbmVTdGFraW5nQWRkcmVzcwACG3N0YXRpY19jYW5pbmVTdGFraW5nQWRkcmVzcwEcc3RhdGljS2V5X2R1Y2tTdGFraW5nQWRkcmVzcwACGHN0YXRpY19mYXJtaW5nQWRkcmVzc05ldwEec3RhdGljS2V5X2R1Y2tJbmN1YmF0b3JBZGRyZXNzAAIXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAAhNzdGF0aWNfaXRlbXNBZGRyZXNzASFzdGF0aWNLZXlfY2FuaW5lV2F2ZXNSZWJpcnRoUHJpY2UAAh5zdGF0aWNfY2FuaW5lV2F2ZXNSZWJpcnRoUHJpY2UBIHN0YXRpY0tleV90dXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAIdc3RhdGljX3R1cnRsZUluY3ViYXRvckFkZHJlc3MBGXN0YXRpY0tleV9iYWJ5RHVja0FkZHJlc3MAAhZzdGF0aWNfYmFieUR1Y2tBZGRyZXNzAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwEJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwABEGdldEZlZUFnZ3JlZ2F0b3IACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgABF2dldENhbmluZUJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEec3RhdGljS2V5X2NhbmluZUJyZWVkZXJBZGRyZXNzAAEZZ2V0Q2FuaW5lSW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBIHN0YXRpY0tleV9jYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAERZ2V0Q291cG9uc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAARdnZXRDYW5pbmVTdGFraW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV9jYW5pbmVTdGFraW5nQWRkcmVzcwABFWdldER1Y2tTdGFraW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHHN0YXRpY0tleV9kdWNrU3Rha2luZ0FkZHJlc3MAARdnZXREdWNrSW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV9kdWNrSW5jdWJhdG9yQWRkcmVzcwABD2dldEl0ZW1zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAARlnZXRUdXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEgc3RhdGljS2V5X3R1cnRsZUluY3ViYXRvckFkZHJlc3MAARJnZXRCYWJ5RHVja0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARlzdGF0aWNLZXlfYmFieUR1Y2tBZGRyZXNzAAEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiCQACAQIaVFI6IFZhbHVlIG5vdCBmb3VuZCBpbiBzYyEAC3dhdmVzQW1vdW50CQEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgkBCWdldE9yYWNsZQAJASFzdGF0aWNLZXlfY2FuaW5lV2F2ZXNSZWJpcnRoUHJpY2UAABBkZWxheUZvckhhdGNoaW5nAAIBCWNoZWNrUmVhbAEHYXNzZXRJZAMDCQAAAggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIJARdnZXRDYW5pbmVCcmVlZGVyQWRkcmVzcwAGCQAAAggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIJARlnZXRDYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAgJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIJAAIBAg1ub3QgdmFsaWQgTkZUARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQdwYXltZW50AwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhlSQ0FQOiBQbGVhc2UgYXR0YWNoIHdhdmVzBAlmZWVBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQlnZXRPcmFjbGUACQESc3RhdGljS2V5X2V4dHJhRmVlAAMJAQIhPQIIBQdwYXltZW50BmFtb3VudAUJZmVlQW1vdW50CQACAQkArAICCQCsAgICHFJDQVA6IFBsZWFzZSBhdHRhY2ggZXhhY3RseSAJAKQDAQUJZmVlQW1vdW50AhMgYW1vdW50IG9mIHdhdmVsZXRzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARBnZXRGZWVBZ2dyZWdhdG9yAAUJZmVlQW1vdW50BQR1bml0BQNuaWwBD2dldFJhbmRvbU51bWJlcgQHb3B0aW9ucwR0eElkFGhhdGNoaW5nRmluaXNoSGVpZ2h0Bm9mZnNldAQPcmFuZG9tU2VlZEJsb2NrCQEFdmFsdWUBCQDtBwEJAGUCBRRoYXRjaGluZ0ZpbmlzaEhlaWdodAABBApyYW5kb21IYXNoCQD3AwEJAMsBAgUEdHhJZAkBBXZhbHVlAQgFD3JhbmRvbVNlZWRCbG9jawN2cmYJAGoCCQCyCQIFCnJhbmRvbUhhc2gJAGgCBQZvZmZzZXQACAUHb3B0aW9ucwENdHJ5R2V0Qm9vbGVhbgEDa2V5BAckbWF0Y2gwCQCgCAEFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwEMZ2V0UmFuZG9tV2luAwJ0eAxmaW5pc2hIZWlnaHQNYmxhY2tsaXN0Q29kZQQNamFja3BvdFJhbmRvbQkBD2dldFJhbmRvbU51bWJlcgQAyAEFAnR4BQxmaW5pc2hIZWlnaHQAAQMJAAACBQ1qYWNrcG90UmFuZG9tAAEJAJQKAgUNamFja3BvdFJhbmRvbQIHamFja3BvdAQBbgkBD2dldFJhbmRvbU51bWJlcgQA6AcFAnR4BQxmaW5pc2hIZWlnaHQAAAQGcmVzdWx0AwMJAGYCAGQFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCCWRvY2tpbmdfQQcCCWRvY2tpbmdfQQMDCQBmAgDIAQUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQIJZG9ja2luZ19CBwIJZG9ja2luZ19CAwMJAGYCAKwCBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAglkb2NraW5nX0MHAglkb2NraW5nX0MDAwkAZgIAkAMFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCCWRvY2tpbmdfRAcCCWRvY2tpbmdfRAMDCQBmAgDCAwUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQIJaW5jdWJhdG9yBwIJaW5jdWJhdG9yAwMJAGYCAOoDBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAgtkdWNrbGluZ180MAcCC2R1Y2tsaW5nXzQwAwMJAGYCAJwEBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAgtkdWNrbGluZ18yMAcCC2R1Y2tsaW5nXzIwAwMJAGYCAIAFBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAg5pdGVtIUFSVC1GRUVENQcCDml0ZW0hQVJULUZFRUQ1AwMJAGYCAMYFBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAg9pdGVtIUFSVC1GRUVEMTAHAg9pdGVtIUFSVC1GRUVEMTADAwkAZgIA5AUFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCD2l0ZW0hQVJULUZFRUQxNQcCD2l0ZW0hQVJULUZFRUQxNQMDCQBmAgCCBgUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQIPaXRlbSFBUlQtRkVFRDIwBwIPaXRlbSFBUlQtRkVFRDIwAwMJAGYCAJYGBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAg9pdGVtIUFSVC1GRUVEMjUHAg9pdGVtIUFSVC1GRUVEMjUDAwkAZgIAqgYFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCD2l0ZW0hQVJULUZFRUQ1MAcCD2l0ZW0hQVJULUZFRUQ1MAMDCQBmAgC+BgUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQIQaXRlbSFBUlQtRkVFRDEwMAcCEGl0ZW0hQVJULUZFRUQxMDADAwkAZgIA3AYFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCE2l0ZW0hQVJULU1VVEFSSVVNLUcHAhNpdGVtIUFSVC1NVVRBUklVTS1HAwMJAGYCAPoGBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAhNpdGVtIUFSVC1NVVRBUklVTS1EBwITaXRlbSFBUlQtTVVUQVJJVU0tRAMDCQBmAgCOBwUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQIRaXRlbSFBUlQtRlJFRUdFTkUHAhFpdGVtIUFSVC1GUkVFR0VORQMDCQBmAgCiBwUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQIQaXRlbSFBUlQtRklYR0VORQcCEGl0ZW0hQVJULUZJWEdFTkUDAwkAZgIA1AcFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCDnRydGxfaW5jdWJhdG9yBwIOdHJ0bF9pbmN1YmF0b3ICD2l0ZW0hQVJULVBPVElPTgkAlAoCBQFuBQZyZXN1bHQBD2dldFJhbmRvbVJldHVybgICdHgMZmluaXNoSGVpZ2h0BAFuCQEPZ2V0UmFuZG9tTnVtYmVyBAACBQJ0eAUMZmluaXNoSGVpZ2h0AAEDCQAAAgUBbgAABgcBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAYGaW5pdFR4B2FkZHJlc3MRYWRkaXRpb25hbFBheW1lbnQGZG91YmxlDWJsYWNrbGlzdENvZGUGcmVzY3VlBAtmaW5pc2hCbG9jawkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgxfZmluaXNoQmxvY2sEBnN0YXR1cwkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19zdGF0dXMEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBBRFhZGRpdGlvbmFsUGF5bWVudAMJAAACBQx2YWxpZFBheW1lbnQFDHZhbGlkUGF5bWVudAMJAQIhPQIFBnN0YXR1cwIEb3BlbgkAAgECH3JlYmlydGggaXMgZmluaXNoZWQgb3Igbm90IG9wZW4DCQBmAgULZmluaXNoQmxvY2sFBmhlaWdodAkAAgECHnlvdSBjYW5ub3QgZmluaXNoIHJlYmlydGgsIHlldAQGb3V0cHV0CQEMZ2V0UmFuZG9tV2luAwkA2QQBBQZpbml0VHgFC2ZpbmlzaEJsb2NrBQ1ibGFja2xpc3RDb2RlBAN3aW4IBQZvdXRwdXQCXzIEBnJhbmRvbQgFBm91dHB1dAJfMQQEdHhJZAUGaW5pdFR4BAZyZXN1bHQDCQECIT0CCQCzCQIFA3dpbgIHZG9ja2luZwUEdW5pdAQFY29sb3IJALICAgUDd2luAAEEBGNhbGwDCQEBIQEFBmRvdWJsZQQFZmlyc3QJAPwHBAkBF2dldENhbmluZVN0YWtpbmdBZGRyZXNzAAIMYWRkRnJlZVBlcmNoCQDMCAIFB2FkZHJlc3MJAMwIAgUFY29sb3IJAMwIAgABBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQFZmlyc3QJAPwHBAkBF2dldENhbmluZVN0YWtpbmdBZGRyZXNzAAIMYWRkRnJlZVBlcmNoCQDMCAIFB2FkZHJlc3MJAMwIAgUFY29sb3IJAMwIAgACBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX3Jlc3VsdDEJAQhhc1N0cmluZwEFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xBQN3aW4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFA3dpbgIHamFja3BvdAQEY2FsbAkA/AcECQEZZ2V0Q2FuaW5lSW5jdWJhdG9yQWRkcmVzcwACDGlzc3VlSmFja3BvdAkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQJAMwIAgIIV1dXV0hXVEYFA25pbAUDbmlsAwkAAAIFBGNhbGwFBGNhbGwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUEY2FsbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFA3dpbgIJaW5jdWJhdG9yBARjYWxsAwkBASEBBQZkb3VibGUEBWZpcnN0CQD8BwQJARlnZXRDYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAIJaXNzdWVGcmVlCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWZpcnN0CQD8BwQJARlnZXRDYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAIJaXNzdWVGcmVlCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0BAZzZWNvbmQJAPwHBAkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MAAg9pc3N1ZUZyZWVUdXJ0bGUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQZzZWNvbmQFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfcmVzdWx0MQkBCGFzU3RyaW5nAQUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xAglpbmN1YmF0b3IFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkBAiE9AgkAswkCBQN3aW4CCGR1Y2tsaW5nBQR1bml0BAVsZXZlbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgUDd2luAgFfAAEECmxldmVsRmluYWwDBQZkb3VibGUJAGgCAAIFBWxldmVsBQVsZXZlbAQEY2FsbAkA/AcECQESZ2V0QmFieUR1Y2tBZGRyZXNzAAIRaXNzdWVGcmVlRHVja2xpbmcJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkCQDMCAIFCmxldmVsRmluYWwFA25pbAUDbmlsAwkAAAIFBGNhbGwFBGNhbGwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUEY2FsbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFA3dpbgIOdHJ0bF9pbmN1YmF0b3IEBGNhbGwDCQEBIQEFBmRvdWJsZQQFZmlyc3QJAPwHBAkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MAAg9pc3N1ZUZyZWVUdXJ0bGUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQFZmlyc3QJAPwHBAkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MAAg9pc3N1ZUZyZWVUdXJ0bGUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QEBnNlY29uZAkA/AcECQEZZ2V0Q2FuaW5lSW5jdWJhdG9yQWRkcmVzcwACCWlzc3VlRnJlZQkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDbmlsAwkAAAIFBnNlY29uZAUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9yZXN1bHQxCQEIYXNTdHJpbmcBBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIFX3dpbjECDnRydGxfaW5jdWJhdG9yBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEY2FsbAUEY2FsbAUEY2FsbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAQIhPQIJALMJAgUDd2luAgRpdGVtBQR1bml0BAhpdGVtTmFtZQkAkQMCCQC1CQIFA3dpbgIBIQABBARjYWxsAwkBASEBBQZkb3VibGUEBWZpcnN0CQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhJpc3N1ZUFydGVmYWN0SW5kZXgJAMwIAgUIaXRlbU5hbWUJAMwIAgUHYWRkcmVzcwkAzAgCAAAFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAVmaXJzdAkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAISaXNzdWVBcnRlZmFjdEluZGV4CQDMCAIFCGl0ZW1OYW1lCQDMCAIFB2FkZHJlc3MJAMwIAgAABQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QEBnNlY29uZAkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAISaXNzdWVBcnRlZmFjdEluZGV4CQDMCAIFCGl0ZW1OYW1lCQDMCAIFB2FkZHJlc3MJAMwIAgABBQNuaWwFA25pbAMJAAACBQZzZWNvbmQFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfcmVzdWx0MQkBCGFzU3RyaW5nAQUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xBQN3aW4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQkArAICAjRSRkI6IFNvbWUgZXJyb3Igb2NjdXJlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIGFkbWlucyEgBQN3aW4DCQAAAgUGcmVzdWx0BQZyZXN1bHQEDnJldHVyblRvU2VuZGVyAwUGcmVzY3VlCQEPZ2V0UmFuZG9tUmV0dXJuAgkA2QQBBQZpbml0VHgFC2ZpbmlzaEJsb2NrBwQNcmV0dXJuUGF5bG9hZAMFDnJldHVyblRvU2VuZGVyBAdhc3NldElkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9hc3NldElkBAZpc3N1ZXIJAQljaGVja1JlYWwBBQdhc3NldElkBANnZW4JAQhhc1N0cmluZwEJAPwHBAkBF2dldENhbmluZUJyZWVkZXJBZGRyZXNzAAIOZ2V0R2VuRnJvbU5hbWUJAMwIAggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZARuYW1lBQNuaWwFA25pbAMJAAACBQNnZW4FA2dlbgQEY2FsbAkA/AcEBQZpc3N1ZXICDmluY3JlYXNlUmFyaXR5CQDMCAIJANgEAQUHYXNzZXRJZAkAzAgCBQNnZW4FA25pbAUDbmlsAwkAAAIFBGNhbGwFBGNhbGwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwABBQdhc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAzggCCQDOCAIJAM4IAgUGcmVzdWx0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBF93aW4FA3dpbgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4Agdfc3RhdHVzAgZmaW5pc2gJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yYW5kb20FBnJhbmRvbQUDbmlsBQx2YWxpZFBheW1lbnQFDXJldHVyblBheWxvYWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIPUkNVOiBhZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19vcmFjbGVBZGRyZXNzBQZvcmFjbGUFA25pbAFpAQtpbml0UmViaXJ0aAAECXBtdENhbmluZQkAkQMCCAUBaQhwYXltZW50cwAABAhwbXRXYXZlcwkAkQMCCAUBaQhwYXltZW50cwABBAdhc3NldElkCQEFdmFsdWUBCAUJcG10Q2FuaW5lB2Fzc2V0SWQEBmluaXRUeAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQlwbXRDYW5pbmUGYW1vdW50AAEJAAIBAhNORlQgaXMgbm90IGF0dGFjaGVkAwMJAQIhPQIIBQhwbXRXYXZlcwZhbW91bnQFC3dhdmVzQW1vdW50BgkBAiE9AggFCHBtdFdhdmVzB2Fzc2V0SWQFBHVuaXQJAAIBAiZXYXZlc3BheW1lbnQgaXMgbm90IGF0dGFjaGVkIG9yIHdyb25nIQQQc2VuZFRvQWdncmVHYXRvcgkAaQIIBQhwbXRXYXZlcwZhbW91bnQABAQFdG9wdXAJAGUCCAUIcG10V2F2ZXMGYW1vdW50BRBzZW5kVG9BZ2dyZUdhdG9yBAdhZGRNb3JlCQD8BwQJARdnZXRDYW5pbmVTdGFraW5nQWRkcmVzcwACFGFkZFdhdmVzQW5kU3Rha2VNb3JlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFBXRvcHVwBQNuaWwDCQAAAgUHYWRkTW9yZQUHYWRkTW9yZQQGaXNzdWVyCQEJY2hlY2tSZWFsAQUHYXNzZXRJZAQDZ2VuCQEIYXNTdHJpbmcBCQD8BwQJARdnZXRDYW5pbmVCcmVlZGVyQWRkcmVzcwACDmdldEdlbkZyb21OYW1lCQDMCAIICQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEbmFtZQUDbmlsBQNuaWwDCQAAAgUDZ2VuBQNnZW4EBGNhbGwJAPwHBAUGaXNzdWVyAgxyZWR1Y2VSYXJpdHkJAMwIAgkA2AQBBQdhc3NldElkCQDMCAIFA2dlbgUDbmlsBQNuaWwDCQAAAgUEY2FsbAUEY2FsbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIMX2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BRBkZWxheUZvckhhdGNoaW5nCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19zdGF0dXMCBG9wZW4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX2Fzc2V0SWQJANgEAQUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEQZ2V0RmVlQWdncmVnYXRvcgAFEHNlbmRUb0FnZ3JlR2F0b3IFBHVuaXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1maW5pc2hSZWJpcnRoAQZpbml0VHgJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAAHAgAHAWkBE2ZpbmlzaFJlYmlydGhEb3VibGUBBmluaXRUeAMJAQEhAQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAIJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAABBwkAAgECD0ludmFsaWQgcGF5bWVudAQHYXNzZXRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtib29zdGVyVHlwZQkBCGFzU3RyaW5nAQkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQtib29zdGVyVHlwZQULYm9vc3RlclR5cGUDCQAAAgULYm9vc3RlclR5cGUCDkFSVC1HSUZUX0RPVUJMCQDOCAIJAMwIAgkBBEJ1cm4CBQdhc3NldElkAAEFA25pbAkBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAYFBmluaXRUeAkApQgBCAUBaQZjYWxsZXIJAJEDAggFAWkIcGF5bWVudHMAAQYCAAcJAAIBAi1FcnJvciEgV3JvbmcgaXRlbSBhdHRhY2hlZCB0byBkb3VibGUgcmV3YXJkcyEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERZmluaXNoUmViaXJ0aEl0ZW0CBmluaXRUeAhpdGVtQ29kZQMDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAQcEB2Fzc2V0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYm9vc3RlclR5cGUJAQhhc1N0cmluZwEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgULYm9vc3RlclR5cGUFC2Jvb3N0ZXJUeXBlAwkAAAIFC2Jvb3N0ZXJUeXBlAgtBUlQtSFdFUkFTRQkAzggCCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAABBQNuaWwJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAEHBQhpdGVtQ29kZQcDCQAAAgULYm9vc3RlclR5cGUCDEFSVC1IV1JFU0NVRQkAzggCCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAABBQNuaWwJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAEHAgAGAwkAAAIFC2Jvb3N0ZXJUeXBlAg5BUlQtR0lGVF9ET1VCTAkAzggCCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAABBQNuaWwJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAEGAgAHCQACAQIbRXJyb3IhIFdyb25nIGl0ZW0gYXR0YWNoZWQgCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAYFBmluaXRUeAkApQgBCAUBaQZjYWxsZXIJAJEDAggFAWkIcGF5bWVudHMAAAcCAAcJAAIBAhBJbnZhbGlkIHBheW1lbnRzAQJ0eAEGdmVyaWZ5AAMJAQlpc1Rlc3RFbnYACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BAlmaXJzdFVzZXIBIFEc5P1m/xJp0vFaFJ87suL0O3/By2gnojRebDjXV91tBApzZWNvbmRVc2VyASBccg5LrvEhT2bmGUX6aqKx7bE2KVlfGczMsOFNQYhqfQQJdGhpcmRVc2VyASCgr5HlLXlDYWEyEq2OufoYWVGdLVNJNsPQo/eoYBk7TgQPZmlyc3RVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJZmlyc3RVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQlmaXJzdFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCWZpcnN0VXNlcgABAAAEEHNlY29uZFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQpzZWNvbmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQpzZWNvbmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQpzZWNvbmRVc2VyAAEAAAQPdGhpcmRVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJdGhpcmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQl0aGlyZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCXRoaXJkVXNlcgABAAAED3NpZ25hdHVyZXNDb3VudAkAZAIJAGQCBQ9maXJzdFVzZXJTaWduZWQFEHNlY29uZFVzZXJTaWduZWQFD3RoaXJkVXNlclNpZ25lZAQHJG1hdGNoMAUCdHgJAGcCBQ9zaWduYXR1cmVzQ291bnQAAjHlXsw=", "height": 3367202, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BLbeS5hHnDSzBYHthNCAvRnD7WUageTojA7CyK19Y6cE Next: AQ4Mo3otUKzLxveu61ZyyEUcyjuodbu4hKtUNiX1bnWi Diff:
OldNewDifferences
183183 then $Tuple2(jackpotRandom, "jackpot")
184184 else {
185185 let n = getRandomNumber(1000, tx, finishHeight, 0)
186- let result = if (if ((200 > n))
186+ let result = if (if ((100 > n))
187187 then (blacklistCode != "docking_A")
188188 else false)
189189 then "docking_A"
190- else if (if ((400 > n))
190+ else if (if ((200 > n))
191191 then (blacklistCode != "docking_B")
192192 else false)
193193 then "docking_B"
194- else if (if ((600 > n))
194+ else if (if ((300 > n))
195195 then (blacklistCode != "docking_C")
196196 else false)
197197 then "docking_C"
198- else if (if ((800 > n))
199- then (blacklistCode != "item!ART-FREEGENE")
198+ else if (if ((400 > n))
199+ then (blacklistCode != "docking_D")
200200 else false)
201- then "item!ART-FREEGENE"
202- else "item!ART-FIXGENE"
201+ then "docking_D"
202+ else if (if ((450 > n))
203+ then (blacklistCode != "incubator")
204+ else false)
205+ then "incubator"
206+ else if (if ((490 > n))
207+ then (blacklistCode != "duckling_40")
208+ else false)
209+ then "duckling_40"
210+ else if (if ((540 > n))
211+ then (blacklistCode != "duckling_20")
212+ else false)
213+ then "duckling_20"
214+ else if (if ((640 > n))
215+ then (blacklistCode != "item!ART-FEED5")
216+ else false)
217+ then "item!ART-FEED5"
218+ else if (if ((710 > n))
219+ then (blacklistCode != "item!ART-FEED10")
220+ else false)
221+ then "item!ART-FEED10"
222+ else if (if ((740 > n))
223+ then (blacklistCode != "item!ART-FEED15")
224+ else false)
225+ then "item!ART-FEED15"
226+ else if (if ((770 > n))
227+ then (blacklistCode != "item!ART-FEED20")
228+ else false)
229+ then "item!ART-FEED20"
230+ else if (if ((790 > n))
231+ then (blacklistCode != "item!ART-FEED25")
232+ else false)
233+ then "item!ART-FEED25"
234+ else if (if ((810 > n))
235+ then (blacklistCode != "item!ART-FEED50")
236+ else false)
237+ then "item!ART-FEED50"
238+ else if (if ((830 > n))
239+ then (blacklistCode != "item!ART-FEED100")
240+ else false)
241+ then "item!ART-FEED100"
242+ else if (if ((860 > n))
243+ then (blacklistCode != "item!ART-MUTARIUM-G")
244+ else false)
245+ then "item!ART-MUTARIUM-G"
246+ else if (if ((890 > n))
247+ then (blacklistCode != "item!ART-MUTARIUM-D")
248+ else false)
249+ then "item!ART-MUTARIUM-D"
250+ else if (if ((910 > n))
251+ then (blacklistCode != "item!ART-FREEGENE")
252+ else false)
253+ then "item!ART-FREEGENE"
254+ else if (if ((930 > n))
255+ then (blacklistCode != "item!ART-FIXGENE")
256+ else false)
257+ then "item!ART-FIXGENE"
258+ else if (if ((980 > n))
259+ then (blacklistCode != "trtl_incubator")
260+ else false)
261+ then "trtl_incubator"
262+ else "item!ART-POTION"
203263 $Tuple2(n, result)
204264 }
205265 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetStringExternal (address,key) = match getString(address, key) {
55 case a: String =>
66 a
77 case _ =>
88 ""
99 }
1010
1111
1212 func tryGetInteger (key) = match getInteger(this, key) {
1313 case b: Int =>
1414 b
1515 case _ =>
1616 0
1717 }
1818
1919
2020 func tryGetString (key) = tryGetStringExternal(this, key)
2121
2222
2323 func asInt (value) = match value {
2424 case int: Int =>
2525 int
2626 case string: String =>
2727 throw(("RAI: wrong type, expected: Int, but got: " + string))
2828 case _ =>
2929 throw("RAI: wrong type, expected: Int")
3030 }
3131
3232
3333 func asBoolean (value) = match value {
3434 case boolean: Boolean =>
3535 boolean
3636 case _ =>
3737 throw("FAB: wrong type, expected: Boolean")
3838 }
3939
4040
4141 func getBool (key) = match getBoolean(this, key) {
4242 case b: Boolean =>
4343 b
4444 case _ =>
4545 false
4646 }
4747
4848
4949 func asString (value) = match value {
5050 case s: String =>
5151 s
5252 case s: Int =>
5353 throw("wrong type, expected: String, got: Int")
5454 case s: Unit =>
5555 throw("wrong type, expected: String, got: Unit")
5656 case _ =>
5757 throw("wrong type, expected: String")
5858 }
5959
6060
6161 func isTestEnv () = getBool("TESTENV")
6262
6363
6464 func staticKey_oracleAddress () = "static_oracleAddress"
6565
6666
6767 func staticKey_extraFee () = "static_extraFee"
6868
6969
7070 func staticKey_feeAggregator () = "static_feeAggregator"
7171
7272
7373 func staticKey_canineIncubatorAddress () = "static_canineIncubatorAddress"
7474
7575
7676 func staticKey_canineBreederAddress () = "static_canineBreederAddress"
7777
7878
7979 func staticKey_couponsAddress () = "static_couponsAddress"
8080
8181
8282 func staticKey_canineStakingAddress () = "static_canineStakingAddress"
8383
8484
8585 func staticKey_duckStakingAddress () = "static_farmingAddressNew"
8686
8787
8888 func staticKey_duckIncubatorAddress () = "static_incubatorAddress"
8989
9090
9191 func staticKey_itemsAddress () = "static_itemsAddress"
9292
9393
9494 func staticKey_canineWavesRebirthPrice () = "static_canineWavesRebirthPrice"
9595
9696
9797 func staticKey_turtleIncubatorAddress () = "static_turtleIncubatorAddress"
9898
9999
100100 func staticKey_babyDuckAddress () = "static_babyDuckAddress"
101101
102102
103103 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
104104
105105
106106 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
107107
108108
109109 func getCanineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineBreederAddress())))
110110
111111
112112 func getCanineIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineIncubatorAddress())))
113113
114114
115115 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
116116
117117
118118 func getCanineStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineStakingAddress())))
119119
120120
121121 func getDuckStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckStakingAddress())))
122122
123123
124124 func getDuckIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckIncubatorAddress())))
125125
126126
127127 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
128128
129129
130130 func getTurtleIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleIncubatorAddress())))
131131
132132
133133 func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_babyDuckAddress())))
134134
135135
136136 func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
137137 case b: Int =>
138138 b
139139 case _ =>
140140 throw("TR: Value not found in sc!")
141141 }
142142
143143
144144 let wavesAmount = tryGetIntegerExternal(getOracle(), staticKey_canineWavesRebirthPrice())
145145
146146 let delayForHatching = 2
147147
148148 func checkReal (assetId) = if (if ((value(assetInfo(assetId)).issuer == getCanineBreederAddress()))
149149 then true
150150 else (value(assetInfo(assetId)).issuer == getCanineIncubatorAddress()))
151151 then value(assetInfo(assetId)).issuer
152152 else throw("not valid NFT")
153153
154154
155155 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
156156 then throw("RCAP: Please attach waves")
157157 else {
158158 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
159159 if ((payment.amount != feeAmount))
160160 then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
161161 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
162162 }
163163
164164
165165 func getRandomNumber (options,txId,hatchingFinishHeight,offset) = {
166166 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
167167 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
168168 (toInt(randomHash, (offset * 8)) % options)
169169 }
170170
171171
172172 func tryGetBoolean (key) = match getBoolean(key) {
173173 case b: Boolean =>
174174 b
175175 case _ =>
176176 false
177177 }
178178
179179
180180 func getRandomWin (tx,finishHeight,blacklistCode) = {
181181 let jackpotRandom = getRandomNumber(200, tx, finishHeight, 1)
182182 if ((jackpotRandom == 1))
183183 then $Tuple2(jackpotRandom, "jackpot")
184184 else {
185185 let n = getRandomNumber(1000, tx, finishHeight, 0)
186- let result = if (if ((200 > n))
186+ let result = if (if ((100 > n))
187187 then (blacklistCode != "docking_A")
188188 else false)
189189 then "docking_A"
190- else if (if ((400 > n))
190+ else if (if ((200 > n))
191191 then (blacklistCode != "docking_B")
192192 else false)
193193 then "docking_B"
194- else if (if ((600 > n))
194+ else if (if ((300 > n))
195195 then (blacklistCode != "docking_C")
196196 else false)
197197 then "docking_C"
198- else if (if ((800 > n))
199- then (blacklistCode != "item!ART-FREEGENE")
198+ else if (if ((400 > n))
199+ then (blacklistCode != "docking_D")
200200 else false)
201- then "item!ART-FREEGENE"
202- else "item!ART-FIXGENE"
201+ then "docking_D"
202+ else if (if ((450 > n))
203+ then (blacklistCode != "incubator")
204+ else false)
205+ then "incubator"
206+ else if (if ((490 > n))
207+ then (blacklistCode != "duckling_40")
208+ else false)
209+ then "duckling_40"
210+ else if (if ((540 > n))
211+ then (blacklistCode != "duckling_20")
212+ else false)
213+ then "duckling_20"
214+ else if (if ((640 > n))
215+ then (blacklistCode != "item!ART-FEED5")
216+ else false)
217+ then "item!ART-FEED5"
218+ else if (if ((710 > n))
219+ then (blacklistCode != "item!ART-FEED10")
220+ else false)
221+ then "item!ART-FEED10"
222+ else if (if ((740 > n))
223+ then (blacklistCode != "item!ART-FEED15")
224+ else false)
225+ then "item!ART-FEED15"
226+ else if (if ((770 > n))
227+ then (blacklistCode != "item!ART-FEED20")
228+ else false)
229+ then "item!ART-FEED20"
230+ else if (if ((790 > n))
231+ then (blacklistCode != "item!ART-FEED25")
232+ else false)
233+ then "item!ART-FEED25"
234+ else if (if ((810 > n))
235+ then (blacklistCode != "item!ART-FEED50")
236+ else false)
237+ then "item!ART-FEED50"
238+ else if (if ((830 > n))
239+ then (blacklistCode != "item!ART-FEED100")
240+ else false)
241+ then "item!ART-FEED100"
242+ else if (if ((860 > n))
243+ then (blacklistCode != "item!ART-MUTARIUM-G")
244+ else false)
245+ then "item!ART-MUTARIUM-G"
246+ else if (if ((890 > n))
247+ then (blacklistCode != "item!ART-MUTARIUM-D")
248+ else false)
249+ then "item!ART-MUTARIUM-D"
250+ else if (if ((910 > n))
251+ then (blacklistCode != "item!ART-FREEGENE")
252+ else false)
253+ then "item!ART-FREEGENE"
254+ else if (if ((930 > n))
255+ then (blacklistCode != "item!ART-FIXGENE")
256+ else false)
257+ then "item!ART-FIXGENE"
258+ else if (if ((980 > n))
259+ then (blacklistCode != "trtl_incubator")
260+ else false)
261+ then "trtl_incubator"
262+ else "item!ART-POTION"
203263 $Tuple2(n, result)
204264 }
205265 }
206266
207267
208268 func getRandomReturn (tx,finishHeight) = {
209269 let n = getRandomNumber(2, tx, finishHeight, 1)
210270 if ((n == 0))
211271 then true
212272 else false
213273 }
214274
215275
216276 func finishRebirthInternal (initTx,address,additionalPayment,double,blacklistCode,rescue) = {
217277 let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
218278 let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
219279 let validPayment = checkAdditionalPayment(additionalPayment)
220280 if ((validPayment == validPayment))
221281 then if ((status != "open"))
222282 then throw("rebirth is finished or not open")
223283 else if ((finishBlock > height))
224284 then throw("you cannot finish rebirth, yet")
225285 else {
226286 let output = getRandomWin(fromBase58String(initTx), finishBlock, blacklistCode)
227287 let win = output._2
228288 let random = output._1
229289 let txId = initTx
230290 let result = if ((indexOf(win, "docking") != unit))
231291 then {
232292 let color = takeRight(win, 1)
233293 let call = if (!(double))
234294 then {
235295 let first = invoke(getCanineStakingAddress(), "addFreePerch", [address, color, 1], nil)
236296 if ((first == first))
237297 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
238298 else throw("Strict value is not equal to itself.")
239299 }
240300 else {
241301 let first = invoke(getCanineStakingAddress(), "addFreePerch", [address, color, 2], nil)
242302 if ((first == first))
243303 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
244304 else throw("Strict value is not equal to itself.")
245305 }
246306 if ((call == call))
247307 then call
248308 else throw("Strict value is not equal to itself.")
249309 }
250310 else if ((win == "jackpot"))
251311 then {
252312 let call = invoke(getCanineIncubatorAddress(), "issueJackpot", [address, txId, "WWWWHWTF"], nil)
253313 if ((call == call))
254314 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
255315 else throw("Strict value is not equal to itself.")
256316 }
257317 else if ((win == "incubator"))
258318 then {
259319 let call = if (!(double))
260320 then {
261321 let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
262322 if ((first == first))
263323 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
264324 else throw("Strict value is not equal to itself.")
265325 }
266326 else {
267327 let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
268328 if ((first == first))
269329 then {
270330 let second = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
271331 if ((second == second))
272332 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "incubator")]
273333 else throw("Strict value is not equal to itself.")
274334 }
275335 else throw("Strict value is not equal to itself.")
276336 }
277337 if ((call == call))
278338 then call
279339 else throw("Strict value is not equal to itself.")
280340 }
281341 else if ((indexOf(win, "duckling") != unit))
282342 then {
283343 let level = parseIntValue(split(win, "_")[1])
284344 let levelFinal = if (double)
285345 then (2 * level)
286346 else level
287347 let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, levelFinal], nil)
288348 if ((call == call))
289349 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
290350 else throw("Strict value is not equal to itself.")
291351 }
292352 else if ((win == "trtl_incubator"))
293353 then {
294354 let call = if (!(double))
295355 then {
296356 let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
297357 if ((first == first))
298358 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
299359 else throw("Strict value is not equal to itself.")
300360 }
301361 else {
302362 let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
303363 if ((first == first))
304364 then {
305365 let second = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
306366 if ((second == second))
307367 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "trtl_incubator")]
308368 else throw("Strict value is not equal to itself.")
309369 }
310370 else throw("Strict value is not equal to itself.")
311371 }
312372 if ((call == call))
313373 then call
314374 else throw("Strict value is not equal to itself.")
315375 }
316376 else if ((indexOf(win, "item") != unit))
317377 then {
318378 let itemName = split(win, "!")[1]
319379 let call = if (!(double))
320380 then {
321381 let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
322382 if ((first == first))
323383 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
324384 else throw("Strict value is not equal to itself.")
325385 }
326386 else {
327387 let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
328388 if ((first == first))
329389 then {
330390 let second = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 1], nil)
331391 if ((second == second))
332392 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
333393 else throw("Strict value is not equal to itself.")
334394 }
335395 else throw("Strict value is not equal to itself.")
336396 }
337397 if ((call == call))
338398 then call
339399 else throw("Strict value is not equal to itself.")
340400 }
341401 else throw(("RFB: Some error occured, please contact the admins! " + win))
342402 if ((result == result))
343403 then {
344404 let returnToSender = if (rescue)
345405 then getRandomReturn(fromBase58String(initTx), finishBlock)
346406 else false
347407 let returnPayload = if (returnToSender)
348408 then {
349409 let assetId = fromBase58String(getStringValue((((("address_" + address) + "_initTx_") + initTx) + "_assetId")))
350410 let issuer = checkReal(assetId)
351411 let gen = asString(invoke(getCanineBreederAddress(), "getGenFromName", [value(assetInfo(assetId)).name], nil))
352412 if ((gen == gen))
353413 then {
354414 let call = invoke(issuer, "increaseRarity", [toBase58String(assetId), gen], nil)
355415 if ((call == call))
356416 then [ScriptTransfer(addressFromStringValue(address), 1, assetId)]
357417 else throw("Strict value is not equal to itself.")
358418 }
359419 else throw("Strict value is not equal to itself.")
360420 }
361421 else nil
362422 (((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_random"), random)]) ++ validPayment) ++ returnPayload)
363423 }
364424 else throw("Strict value is not equal to itself.")
365425 }
366426 else throw("Strict value is not equal to itself.")
367427 }
368428
369429
370430 @Callable(i)
371431 func configureOracle (oracle) = if ((i.caller != this))
372432 then throw("RCU: admin only")
373433 else [StringEntry("static_oracleAddress", oracle)]
374434
375435
376436
377437 @Callable(i)
378438 func initRebirth () = {
379439 let pmtCanine = i.payments[0]
380440 let pmtWaves = i.payments[1]
381441 let assetId = value(pmtCanine.assetId)
382442 let initTx = toBase58String(i.transactionId)
383443 let address = toString(i.caller)
384444 if ((pmtCanine.amount != 1))
385445 then throw("NFT is not attached")
386446 else if (if ((pmtWaves.amount != wavesAmount))
387447 then true
388448 else (pmtWaves.assetId != unit))
389449 then throw("Wavespayment is not attached or wrong!")
390450 else {
391451 let sendToAggreGator = (pmtWaves.amount / 4)
392452 let topup = (pmtWaves.amount - sendToAggreGator)
393453 let addMore = invoke(getCanineStakingAddress(), "addWavesAndStakeMore", nil, [AttachedPayment(unit, topup)])
394454 if ((addMore == addMore))
395455 then {
396456 let issuer = checkReal(assetId)
397457 let gen = asString(invoke(getCanineBreederAddress(), "getGenFromName", [value(assetInfo(assetId)).name], nil))
398458 if ((gen == gen))
399459 then {
400460 let call = invoke(issuer, "reduceRarity", [toBase58String(assetId), gen], nil)
401461 if ((call == call))
402462 then [IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"), (height + delayForHatching)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "open"), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetId"), toBase58String(assetId)), ScriptTransfer(getFeeAggregator(), sendToAggreGator, unit)]
403463 else throw("Strict value is not equal to itself.")
404464 }
405465 else throw("Strict value is not equal to itself.")
406466 }
407467 else throw("Strict value is not equal to itself.")
408468 }
409469 }
410470
411471
412472
413473 @Callable(i)
414474 func finishRebirth (initTx) = finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false, "", false)
415475
416476
417477
418478 @Callable(i)
419479 func finishRebirthDouble (initTx) = if (!(if ((size(i.payments) == 2))
420480 then (i.payments[0].amount == 1)
421481 else false))
422482 then throw("Invalid payment")
423483 else {
424484 let assetId = value(i.payments[0].assetId)
425485 let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
426486 if ((boosterType == boosterType))
427487 then if ((boosterType == "ART-GIFT_DOUBL"))
428488 then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true, "", false))
429489 else throw("Error! Wrong item attached to double rewards!")
430490 else throw("Strict value is not equal to itself.")
431491 }
432492
433493
434494
435495 @Callable(i)
436496 func finishRebirthItem (initTx,itemCode) = if (if ((size(i.payments) == 2))
437497 then (i.payments[0].amount == 1)
438498 else false)
439499 then {
440500 let assetId = value(i.payments[0].assetId)
441501 let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
442502 if ((boosterType == boosterType))
443503 then if ((boosterType == "ART-HWERASE"))
444504 then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], false, itemCode, false))
445505 else if ((boosterType == "ART-HWRESCUE"))
446506 then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], false, "", true))
447507 else if ((boosterType == "ART-GIFT_DOUBL"))
448508 then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true, "", false))
449509 else throw("Error! Wrong item attached ")
450510 else throw("Strict value is not equal to itself.")
451511 }
452512 else if ((size(i.payments) == 1))
453513 then finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false, "", false)
454514 else throw("Invalid payments")
455515
456516
457517 @Verifier(tx)
458518 func verify () = if (isTestEnv())
459519 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
460520 else {
461521 let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
462522 let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
463523 let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
464524 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
465525 then 1
466526 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
467527 then 1
468528 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
469529 then 1
470530 else 0
471531 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
472532 then 1
473533 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
474534 then 1
475535 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
476536 then 1
477537 else 0
478538 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
479539 then 1
480540 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
481541 then 1
482542 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
483543 then 1
484544 else 0
485545 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
486546 match tx {
487547 case _ =>
488548 (signaturesCount >= 2)
489549 }
490550 }
491551

github/deemru/w8io/169f3d6 
55.17 ms