tx · 3HEVyMgHxugsyNZW9gwsd2mnBjSDoF2V3rSQz9KtBAfZ

3P5E9xamcWoymiqLx8ZdmR7o4fJSRMGp1WR:  -0.01600000 Waves

2023.02.14 12:29 [3514701] smart account 3P5E9xamcWoymiqLx8ZdmR7o4fJSRMGp1WR > SELF 0.00000000 Waves

{ "type": 13, "id": "3HEVyMgHxugsyNZW9gwsd2mnBjSDoF2V3rSQz9KtBAfZ", "fee": 1600000, "feeAssetId": null, "timestamp": 1676367002090, "version": 2, "chainId": 87, "sender": "3P5E9xamcWoymiqLx8ZdmR7o4fJSRMGp1WR", "senderPublicKey": "6DknLGEJHLXmZB6ni3tGa8M3gccMMmc3uaaPhvCSuKvM", "proofs": [ "2fkx1kUTJJLBKQnaGotoKyfj38Cf6GK2npMuAu8BH6gsNhNwfD1EyPhFDfF6Na5WjvrkY9DNDwNivcYTMFgLx5Uo" ], "script": "base64:BgJMCAISAwoBCBIECgIBCBIECgIBCBIDCgEIEgMKAQgSBAoCCAgSBQoDCAEBEgMKAQgSABIAEgASBAoCCAgSAwoBARIAEgMKAQESAwoBCCsBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAIUc3RhdGljX29yYWNsZUFkZHJlc3MBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwACFXN0YXRpY19icmVlZGVyQWRkcmVzcwEUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAhFzdGF0aWNfZWdnQXNzZXRJZAEac3RhdGljS2V5X3RydXN0ZWRDb250cmFjdHMAAhdzdGF0aWNfdHJ1c3RlZENvbnRyYWN0cwEYc3RhdGljS2V5X3JlYmlydGhBZGRyZXNzAAIVc3RhdGljX3JlYmlydGhBZGRyZXNzARFrZXlfYXJ0ZWZhY3RPd25lcgIMYXJ0ZWZhY3ROYW1lBW93bmVyCQCsAgIJAKwCAgkArAICBQxhcnRlZmFjdE5hbWUCAV8FBW93bmVyAgZfb3duZXIBEWtleV91bnN0YWtlSGVpZ2h0AgxhcnRlZmFjdE5hbWUKYXJ0ZWZhY3RJZAkArAICCQCsAgIJAKwCAgUMYXJ0ZWZhY3ROYW1lAgFfBQphcnRlZmFjdElkAg9fdW5zdGFrZV9oZWlnaHQBFWtleV9leHRlcm5hbEJvb3N0RHVjawEGZHVja0lkCQCsAgIFBmR1Y2tJZAIUX2R1Y2tfZXh0ZXJuYWxfYm9vc3QBGGtleV9leHRlcm5hbEJvb3N0QWRkcmVzcwEHYWRkcmVzcwkArAICBQdhZGRyZXNzAhRfdXNlcl9leHRlcm5hbF9ib29zdAERa2V5X3ByaWNlQ29zbWV0aWMBBGl0ZW0JAKwCAgIQZGlyZWN0X2Nvc21ldGljXwUEaXRlbQEUa2V5X21heFNhbGVzQ29zbWV0aWMBBGl0ZW0JAKwCAgkArAICAhBkaXJlY3RfY29zbWV0aWNfBQRpdGVtAgpfbWF4X3NhbGVzARBrZXlfc2FsZUNvc21ldGljAQRpdGVtCQCsAgIJAKwCAgIQZGlyZWN0X2Nvc21ldGljXwUEaXRlbQIFX3NhbGUBFmtleV9wcmljZUFzc2V0Q29zbWV0aWMBBGl0ZW0JAKwCAgkArAICAhBkaXJlY3RfY29zbWV0aWNfBQRpdGVtAgtfcHJpY2VBc3NldAEaa2V5X2dyb3dQZXJjZW50YWdlQ29zbWV0aWMBBGl0ZW0JAKwCAgkArAICAhBkaXJlY3RfY29zbWV0aWNfBQRpdGVtAhNfZ3Jvd2luZ19wZXJjZW50YWdlARBrZXlfc29sZENvc21ldGljAQRpdGVtCQCsAgIJAKwCAgIQZGlyZWN0X2Nvc21ldGljXwUEaXRlbQIFX3NvbGQBFWtleV9sYXN0UHJpY2VDb3NtZXRpYwEEaXRlbQkArAICCQCsAgICEGRpcmVjdF9jb3NtZXRpY18FBGl0ZW0CC19sYXN0X3ByaWNlARNrZXlfc3RhcnRUc0Nvc21ldGljAQRpdGVtCQCsAgIJAKwCAgIQZGlyZWN0X2Nvc21ldGljXwUEaXRlbQIIX3N0YXJ0VHMBEWtleV9lbmRUc0Nvc21ldGljAQRpdGVtCQCsAgIJAKwCAgIQZGlyZWN0X2Nvc21ldGljXwUEaXRlbQIGX2VuZFRzARdrZXlfcHJvY2Vzc0ZpbmlzaEhlaWdodAIHYWRkcmVzcwR0eElkCQCsAgIJAKwCAgkArAICBQdhZGRyZXNzAgFfCQDYBAEFBHR4SWQCA19maAAKZGV2QWRkcmVzcwEaAVcXd9hCTyE6CkZPy+KvhiJrE5znW6fefHsACmVnZ3NOZWVkZWQJAGgCAAMAgMLXLwAOYXJ0ZWZhY3RzTGltaXQJAGQCAK0CANgEAAlmcmVlR2VuZXMJAMwIAgIBQQkAzAgCAgFCCQDMCAICAUMJAMwIAgIBRAkAzAgCAgFFCQDMCAICAUYFA25pbAAMb2xkQXJ0ZWZhY3RzCQDMCAICCEFSVC1MQUtFCQDMCAICCUFSVC1IT1VTRQkAzAgCAgxBUlQtQklHSE9VU0UJAMwIAgILQVJULUZJWEdFTkUJAMwIAgIMQVJULUZSRUVHRU5FCQDMCAICCkFSVC1NSVJST1IJAMwIAgIIQVJULVBPTVAJAMwIAgIIQVJULUNBUEUJAMwIAgIHQVJULUhBVAkAzAgCAg5BUlQtQ1VTVE9NRFVDSwUDbmlsAAlhcnRlZmFjdHMJAMwIAgIKQVJULVhNSVNUTAkAzAgCAghBUlQtWEhBVAkAzAgCAgpBUlQtWFNDQVJGCQDMCAICDEFSVC1YU1dFQVRFUgkAzAgCAglBUlQtWFNPQ0sJAMwIAgIJQVJULVhUUkVFBQNuaWwAC2FsbEFydGVmYWN0CQDOCAIFCWFydGVmYWN0cwUMb2xkQXJ0ZWZhY3RzAQ10cnlHZXRCb29sZWFuAQNrZXkEByRtYXRjaDAJAJsIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQx0cnlHZXRTdHJpbmcBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABD2dldFJhbmRvbU51bWJlcgQIdmFyaWFudHMEdHhJZAxmaW5pc2hIZWlnaHQGb2Zmc2V0BA9yYW5kb21TZWVkQmxvY2sJAQV2YWx1ZQEJAO0HAQkAZQIFDGZpbmlzaEhlaWdodAABBApyYW5kb21IYXNoCQD3AwEJAMsBAgkAywECAQQcQX3mBQR0eElkCQEFdmFsdWUBCAUPcmFuZG9tU2VlZEJsb2NrA3ZyZgkAagIJALIJAgUKcmFuZG9tSGFzaAUGb2Zmc2V0BQh2YXJpYW50cwERZ2V0UmFuZG9tQXJ0ZWZhY3QCBWJveElkAWgEDHJhbmRvbU51bWJlcgkBD2dldFJhbmRvbU51bWJlcgQABgUFYm94SWQFAWgAAQkAkQMCBQlhcnRlZmFjdHMFDHJhbmRvbU51bWJlcgEOZ2V0UmFuZG9tR2VuZXMCBHR4SWQBaAQMcmFuZG9tTnVtYmVyCQEPZ2V0UmFuZG9tTnVtYmVyBAAGBQR0eElkBQFoAAIJAJEDAgUJZnJlZUdlbmVzBQxyYW5kb21OdW1iZXIBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAERZ2V0QnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAQ1nZXRFZ2dBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFHN0YXRpY0tleV9lZ2dBc3NldElkAAETZ2V0VHJ1c3RlZENvbnRyYWN0cwAJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEac3RhdGljS2V5X3RydXN0ZWRDb250cmFjdHMAARFnZXRSZWJpcnRoQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9yZWJpcnRoQWRkcmVzcwABF3RyeUdldENvc21ldGljSXRlbVByaWNlAQRpdGVtBANrZXkJARFrZXlfcHJpY2VDb3NtZXRpYwEFBGl0ZW0EByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQkAAgECMElUR0NJUDogVGhpcyBpdGVtIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN0b3JlIQEIYXNTdHJpbmcBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAUGc3RyaW5nCQACAQIcd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IFN0cmluZwEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEObWFuaXB1bGF0ZU5hbWUDCWFzc2V0TmFtZQhwb3NpdGlvbgRjaGFyCQCsAgIJAKwCAgkArwICBQlhc3NldE5hbWUJAGUCBQhwb3NpdGlvbgABBQRjaGFyCQCyAgIFCWFzc2V0TmFtZQkAZQIAEAUIcG9zaXRpb24BEGl0ZW1Jc0luQ29vbERvd24CDGFydGVmYWN0TmFtZQphcnRlZmFjdElkBBF1bnN0YWtlSGVpZ2h0TGFzdAkBDXRyeUdldEludGVnZXIBCQERa2V5X3Vuc3Rha2VIZWlnaHQCBQxhcnRlZmFjdE5hbWUFCmFydGVmYWN0SWQEDmNvb2xkb3duUGVyaW9kAPABAwkAZgIFBmhlaWdodAkAZAIFEXVuc3Rha2VIZWlnaHRMYXN0BQ5jb29sZG93blBlcmlvZAcGEAFpAQ1kaXJlY3RCdXlJdGVtAQhpdGVtTmFtZQQJYmFzZVByaWNlCQEXdHJ5R2V0Q29zbWV0aWNJdGVtUHJpY2UBBQhpdGVtTmFtZQQEZ3JvdwkBDXRyeUdldEludGVnZXIBCQEaa2V5X2dyb3dQZXJjZW50YWdlQ29zbWV0aWMBBQhpdGVtTmFtZQQHc3RhcnRUcwkBDXRyeUdldEludGVnZXIBCQETa2V5X3N0YXJ0VHNDb3NtZXRpYwEFCGl0ZW1OYW1lBAVlbmRUcwkBDXRyeUdldEludGVnZXIBCQETa2V5X3N0YXJ0VHNDb3NtZXRpYwEFCGl0ZW1OYW1lAwMJAQIhPQIFB3N0YXJ0VHMAAAkAZgIFB3N0YXJ0VHMIBQlsYXN0QmxvY2sJdGltZXN0YW1wBwkAAgECIUlEQkk6IFRoZSBzYWxlIGRpZCBub3Qgc3RhcnQgeWV0IQMDCQECIT0CBQVlbmRUcwAACQBmAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFBWVuZFRzBwkAAgECJElEQkk6IFRoZSBzYWxlIGhhcyBhbHJlYWR5IGZpbmlzaGVkIQMJAQEhAQkBDXRyeUdldEJvb2xlYW4BCQEQa2V5X3NhbGVDb3NtZXRpYwEFCGl0ZW1OYW1lCQACAQkArAICAh9JREJJOiBJdGVtIG5vdCBmb3Igc2FsZSBhbnltb3JlCQEQa2V5X3NhbGVDb3NtZXRpYwEFCGl0ZW1OYW1lBA1tYXhTYWxlc1ZhbHVlCQENdHJ5R2V0SW50ZWdlcgEJARRrZXlfbWF4U2FsZXNDb3NtZXRpYwEFCGl0ZW1OYW1lBAlzb2xkVmFsdWUJAQ10cnlHZXRJbnRlZ2VyAQkBEGtleV9zb2xkQ29zbWV0aWMBBQhpdGVtTmFtZQQFcHJpY2UDCQAAAgUEZ3JvdwAABQliYXNlUHJpY2UJAGQCBQliYXNlUHJpY2UJAGgCCQBpAgUJYmFzZVByaWNlAGQJAGgCBQlzb2xkVmFsdWUFBGdyb3cDAwkBAiE9AgUNbWF4U2FsZXNWYWx1ZQAACQBnAgUJc29sZFZhbHVlBQ1tYXhTYWxlc1ZhbHVlBwkAAgECGElEQkk6IE1heCBlZGl0aW9ucyBzb2xkIQQHYXNzZXRJZAMJAAACCQEMdHJ5R2V0U3RyaW5nAQkBFmtleV9wcmljZUFzc2V0Q29zbWV0aWMBBQhpdGVtTmFtZQIACQENZ2V0RWdnQXNzZXRJZAAJANkEAQkBDHRyeUdldFN0cmluZwEJARZrZXlfcHJpY2VBc3NldENvc21ldGljAQUIaXRlbU5hbWUEE2Ftb3VudFBhaWRCeUNvdXBvbnMAAAQJbGVmdFRvUGF5CQBlAgUFcHJpY2UFE2Ftb3VudFBhaWRCeUNvdXBvbnMEB3BheW1lbnQDCQECIT0CBQlsZWZ0VG9QYXkAAAQMZmlyc3RQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBmFtb3VudAgFDGZpcnN0UGF5bWVudAZhbW91bnQDCQECIT0CCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQFB2Fzc2V0SWQJAAIBCQCsAgICPklEQkk6IFlvdSBjYW4gYXR0YWNoIG9ubHkgdG9rZW5zIHdpdGggdGhlIGZvbGxvd2luZyBhc3NldCBpZDogCQDYBAEFB2Fzc2V0SWQDCQECIT0CBQZhbW91bnQFCWxlZnRUb1BheQkAAgEJAKwCAgIqSURCSTogUGxlYXNlIGF0dGFjaCB0aGUgZXhhY3QgYXNzZXQgYW1vdW50CQCkAwEFBXByaWNlBQlsZWZ0VG9QYXkAAAMJAAACBQdwYXltZW50BQdwYXltZW50BAd0eElkU3RyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEB2FkZHJlc3MIBQFpDG9yaWdpbkNhbGxlcgQIYXJ0ZWZhY3QJAMMIBwUIaXRlbU5hbWUJAKwCAgIiTkZUIGFydGVmYWN0IG9mIFdhdmVzIER1Y2tzIGdhbWU6IAUIaXRlbU5hbWUAAQAABwUEdW5pdAAABAphcnRlZmFjdElkCQC4CAEFCGFydGVmYWN0CQCUCgIJAMwIAgUIYXJ0ZWZhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICCWFydGVmYWN0XwkA2AQBBQphcnRlZmFjdElkAgVfdHlwZQUIaXRlbU5hbWUJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlfbGFzdFByaWNlQ29zbWV0aWMBBQhpdGVtTmFtZQUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlfc29sZENvc21ldGljAQUIaXRlbU5hbWUJAGQCBQlzb2xkVmFsdWUAAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQdhZGRyZXNzAAEFCmFydGVmYWN0SWQFA25pbAkA2AQBBQphcnRlZmFjdElkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD21hbmlwdWxhdGVCb29zdAIFYm9vc3QGZHVja0lkBBBhbGxvd2VkQ29udHJhY3RzCQETZ2V0VHJ1c3RlZENvbnRyYWN0cwAEFGFsbG93ZWRDb250cmFjdHNMaXN0CQC1CQIFEGFsbG93ZWRDb250cmFjdHMCATsECmRhcHBUb0NhbGwJAKUIAQgFAWkGY2FsbGVyAwkAAAIJAM8IAgUUYWxsb3dlZENvbnRyYWN0c0xpc3QFCmRhcHBUb0NhbGwFBHVuaXQJAAIBAjRJTUI6IFRoaXMgc21hcnQgY29udHJhY3QgY2FuJ3QgbWFuaXB1bGF0ZSB0aGUgYm9vc3QhBANrZXkJARVrZXlfZXh0ZXJuYWxCb29zdER1Y2sBBQZkdWNrSWQEC2FjdGl2ZUJvb3N0CQENdHJ5R2V0SW50ZWdlcgEFA2tleQQIbmV3Qm9vc3QJAGQCBQthY3RpdmVCb29zdAUFYm9vc3QDCQBmAgAABQhuZXdCb29zdAkAAgECQElNQjogU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBib29zdCwgcGxlYXNlIGNvbnRhY3QgdGhlIGFkbWlucyEJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUIbmV3Qm9vc3QFA25pbAFpARZtYW5pcHVsYXRlQm9vc3RBY2NvdW50AgVib29zdAdhZGRyZXNzBBBhbGxvd2VkQ29udHJhY3RzCQETZ2V0VHJ1c3RlZENvbnRyYWN0cwAEFGFsbG93ZWRDb250cmFjdHNMaXN0CQC1CQIFEGFsbG93ZWRDb250cmFjdHMCATsECmRhcHBUb0NhbGwJAKUIAQgFAWkGY2FsbGVyAwkAAAIJAM8IAgUUYWxsb3dlZENvbnRyYWN0c0xpc3QFCmRhcHBUb0NhbGwFBHVuaXQJAAIBAjVJTUJBOiBUaGlzIHNtYXJ0IGNvbnRyYWN0IGNhbid0IG1hbmlwdWxhdGUgdGhlIGJvb3N0IQQDa2V5CQEYa2V5X2V4dGVybmFsQm9vc3RBZGRyZXNzAQUHYWRkcmVzcwQLYWN0aXZlQm9vc3QJAQ10cnlHZXRJbnRlZ2VyAQUDa2V5BAhuZXdCb29zdAkAZAIFC2FjdGl2ZUJvb3N0BQVib29zdAMJAGYCAAAFCG5ld0Jvb3N0CQACAQJBSU1CQTogU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBib29zdCwgcGxlYXNlIGNvbnRhY3QgdGhlIGFkbWlucyEJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUIbmV3Qm9vc3QFA25pbAFpARRjaGVja0FydGVmYWN0RGV0YWlscwEHYXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAlhc3NldE5hbWUJAQV2YWx1ZQEIBQVhc3NldARuYW1lAwMDCQEPY29udGFpbnNFbGVtZW50AgULYWxsQXJ0ZWZhY3QFCWFzc2V0TmFtZQYJAQlpc0RlZmluZWQBCQEXdHJ5R2V0Q29zbWV0aWNJdGVtUHJpY2UBBQlhc3NldE5hbWUJAAACCAUFYXNzZXQGaXNzdWVyBQR0aGlzBwkAlAoCBQNuaWwFCWFzc2V0TmFtZQkAAgECEEludmFsaWQgYXJ0ZWZhY3QBaQEPY29uZmlndXJlT3JhY2xlAQZvcmFjbGUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAFBm9yYWNsZQUDbmlsAWkBGmNhbGN1bGF0ZUZhcm1pbmdQb3dlckJvb3N0AgZkdWNrSWQHYWRkcmVzcwQRZXh0ZXJuYWxCb29zdER1Y2sJAQ10cnlHZXRJbnRlZ2VyAQkBFWtleV9leHRlcm5hbEJvb3N0RHVjawEFBmR1Y2tJZAQUZXh0ZXJuYWxCb29zdEFkZHJlc3MJAQ10cnlHZXRJbnRlZ2VyAQkBGGtleV9leHRlcm5hbEJvb3N0QWRkcmVzcwEFB2FkZHJlc3MECnRvdGFsQm9vc3QJAGQCBRFleHRlcm5hbEJvb3N0RHVjawUUZXh0ZXJuYWxCb29zdEFkZHJlc3MJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZkdWNrSWQCC19sYXN0X2Jvb3N0BQp0b3RhbEJvb3N0BQNuaWwFCnRvdGFsQm9vc3QBaQEJZml4ZWRHZW5lAwd0eElkU3RyD3BhcmVudEZpeGVkR2VuZRFwb3NpdGlvbkZpeGVkR2VuZQQMZmlyc3RQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEDGZpcnN0QXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQDCQECIT0CCAUMZmlyc3RQYXltZW50BmFtb3VudAABCQACAQITTkZUIGlzIG5vdCBhdHRhY2hlZAQIYXJ0ZWZhY3QJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgUMZmlyc3RBc3NldElkBQNuaWwFA25pbAMJAAACBQhhcnRlZmFjdAUIYXJ0ZWZhY3QDCQECIT0CBQhhcnRlZmFjdAILQVJULUZJWEdFTkUJAAIBAilZb3UgbmVlZCB0byBhdHRhY2ggYSBBUlQtRklYR0VORSBhcnRlZmFjdAQEdHhJZAkA2QQBBQd0eElkU3RyBA9maW5pc2hIZWlnaHRLZXkJARdrZXlfcHJvY2Vzc0ZpbmlzaEhlaWdodAIJAKUIAQgFAWkGY2FsbGVyBQR0eElkBBNwcm9jZXNzRmluaXNoSGVpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCCQERZ2V0QnJlZWRlckFkZHJlc3MABQ9maW5pc2hIZWlnaHRLZXkED2R1Y2tHZW5lc1N0cmluZwkBCGFzU3RyaW5nAQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAgxnZW5lcmF0ZUR1Y2sJAMwIAgUEdHhJZAkAzAgCBRNwcm9jZXNzRmluaXNoSGVpZ2h0CQDMCAIFD3BhcmVudEZpeGVkR2VuZQkAzAgCBRFwb3NpdGlvbkZpeGVkR2VuZQkAzAgCAgAJAMwIAgAABQNuaWwFA25pbAMJAAACBQ9kdWNrR2VuZXNTdHJpbmcFD2R1Y2tHZW5lc1N0cmluZwQEY2FsbAkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAhdmaW5pc2hEdWNrSGF0Y2hpbmdJdGVtcwkAzAgCBQd0eElkU3RyCQDMCAIFD2R1Y2tHZW5lc1N0cmluZwUDbmlsBQNuaWwDCQAAAgUEY2FsbAUEY2FsbAkAzAgCCQEEQnVybgIJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAABBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZnJlZUdlbmUBB3R4SWRTdHIEDGZpcnN0UGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAxmaXJzdEFzc2V0SWQJANgEAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkAwkBAiE9AggFDGZpcnN0UGF5bWVudAZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQECGFydGVmYWN0CQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIFDGZpcnN0QXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUIYXJ0ZWZhY3QFCGFydGVmYWN0AwkBAiE9AgUIYXJ0ZWZhY3QCDEFSVC1GUkVFR0VORQkAAgECKllvdSBuZWVkIHRvIGF0dGFjaCBhIEFSVC1GUkVFR0VORSBhcnRlZmFjdAQEdHhJZAkA2QQBBQd0eElkU3RyBA9maW5pc2hIZWlnaHRLZXkJARdrZXlfcHJvY2Vzc0ZpbmlzaEhlaWdodAIJAKUIAQgFAWkGY2FsbGVyBQR0eElkBBNwcm9jZXNzRmluaXNoSGVpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCCQERZ2V0QnJlZWRlckFkZHJlc3MABQ9maW5pc2hIZWlnaHRLZXkEDHNlbGVjdGVkR2VuZQkBDmdldFJhbmRvbUdlbmVzAgUEdHhJZAUTcHJvY2Vzc0ZpbmlzaEhlaWdodAQOcmFuZG9tUG9zaXRpb24JAQ9nZXRSYW5kb21OdW1iZXIEAAcFBHR4SWQFE3Byb2Nlc3NGaW5pc2hIZWlnaHQAAwQPZHVja0dlbmVzU3RyaW5nCQEIYXNTdHJpbmcBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACDGdlbmVyYXRlRHVjawkAzAgCBQR0eElkCQDMCAIFE3Byb2Nlc3NGaW5pc2hIZWlnaHQJAMwIAgAACQDMCAIAAAkAzAgCBQxzZWxlY3RlZEdlbmUJAMwIAgUOcmFuZG9tUG9zaXRpb24FA25pbAUDbmlsAwkAAAIFD2R1Y2tHZW5lc1N0cmluZwUPZHVja0dlbmVzU3RyaW5nBARjYWxsCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACF2ZpbmlzaER1Y2tIYXRjaGluZ0l0ZW1zCQDMCAIFB3R4SWRTdHIJAMwIAgUPZHVja0dlbmVzU3RyaW5nBQNuaWwFA25pbAMJAAACBQRjYWxsBQRjYWxsCQDMCAIJAQRCdXJuAgkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkAAEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhjb3B5RHVjawAEDGZpcnN0UGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABA1zZWNvbmRQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAEEDGZpcnN0QXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQECGNoaWxkcmVuCQEFYXNJbnQBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACFnZhbGlkYXRlQW5kR2V0Q2hpbGRyZW4JAMwIAgUMZmlyc3RBc3NldElkBQNuaWwFA25pbAMJAAACBQhjaGlsZHJlbgUIY2hpbGRyZW4DAwkBAiE9AggFDGZpcnN0UGF5bWVudAZhbW91bnQAAQYJAQIhPQIIBQ1zZWNvbmRQYXltZW50BmFtb3VudAABCQACAQITTkZUIGlzIG5vdCBhdHRhY2hlZAQIYXJ0ZWZhY3QJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgkA2AQBCQEFdmFsdWUBCAUNc2Vjb25kUGF5bWVudAdhc3NldElkBQNuaWwFA25pbAMJAAACBQhhcnRlZmFjdAUIYXJ0ZWZhY3QDCQECIT0CBQhhcnRlZmFjdAIKQVJULU1JUlJPUgkAAgECKFlvdSBuZWVkIHRvIGF0dGFjaCBhIEFSVC1NSVJST1IgYXJ0ZWZhY3QEB25mdEluZm8JAQV2YWx1ZQEJAOwHAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkBAlhc3NldDFHZW4JALUJAggFB25mdEluZm8EbmFtZQIAAwMJAAACCQCRAwIFCWFzc2V0MUdlbgAOAgFHBgkAAAIJAJEDAgUJYXNzZXQxR2VuAA4CAUoJAAIBAhpZb3UgY2FuJ3QgbWlycm9yIHRoaXMgZHVjawQHZHVja0dlbggFB25mdEluZm8EbmFtZQQEY2FsbAkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAhZjcmVhdGVEdWNrU3BlY2lhbEdlbmVzCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgUHZHVja0dlbgkAzAgCBQhjaGlsZHJlbgUDbmlsBQNuaWwDCQAAAgUEY2FsbAUEY2FsbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQgFDGZpcnN0UGF5bWVudAdhc3NldElkCQDMCAIJAQRCdXJuAgkBBXZhbHVlAQgFDXNlY29uZFBheW1lbnQHYXNzZXRJZAABBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERYWRkQXJ0ZUZhY3RUb0R1Y2sABAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQNc2Vjb25kUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBAxmaXJzdEFzc2V0SWQJANgEAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkAwMJAQIhPQIIBQxmaXJzdFBheW1lbnQGYW1vdW50AAEGCQECIT0CCAUNc2Vjb25kUGF5bWVudAZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQECGNoaWxkcmVuCQEFYXNJbnQBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACFnZhbGlkYXRlQW5kR2V0Q2hpbGRyZW4JAMwIAgUMZmlyc3RBc3NldElkBQNuaWwFA25pbAMJAAACBQhjaGlsZHJlbgUIY2hpbGRyZW4DCQAAAgUIY2hpbGRyZW4AAAkAAgECJFlvdSBjYW4gb25seSBwaWNrIGEgc3RlcmlsZSBORlQtZHVjawQIYXJ0ZWZhY3QJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgkA2AQBCQEFdmFsdWUBCAUNc2Vjb25kUGF5bWVudAdhc3NldElkBQNuaWwFA25pbAMJAAACBQhhcnRlZmFjdAUIYXJ0ZWZhY3QDAwkBAiE9AgUIYXJ0ZWZhY3QCCEFSVC1YSEFUCQECIT0CBQhhcnRlZmFjdAIIQVJULVBPTVAHCQACAQIyWW91IG5lZWQgdG8gYXR0YWNoIGEgQVJULVhIQVQgb3IgQVJULVBPTVAgYXJ0ZWZhY3QEB25mdEluZm8JAQV2YWx1ZQEJAOwHAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkBAlhc3NldDFHZW4JALUJAggFB25mdEluZm8EbmFtZQIAAwMJAAACCQCRAwIFCWFzc2V0MUdlbgAOAgFHBgkAAAIJAJEDAgUJYXNzZXQxR2VuAA4CAUoJAAIBAhpZb3UgY2FuJ3QgbWlycm9yIHRoaXMgZHVjawMDCQAAAgkAkQMCBQlhc3NldDFHZW4ABQIBUwYJAAACCQCRAwIFCWFzc2V0MUdlbgAFAgFUCQACAQIfeW91IGFscmVhZHkgYXR0YWNoZWQgYSBhcnRlZmFjdAQEY2hhcgMJAAACBQhhcnRlZmFjdAIIQVJULVhIQVQCAVQDCQAAAgUIYXJ0ZWZhY3QCCEFSVC1QT01QAgFTCQACAQIPTm8gY2hhciBkZWZpbmVkBApvbGREdWNrR2VuCAUHbmZ0SW5mbwRuYW1lBApvbGRGYXJtR2VuCQEIYXNTdHJpbmcBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACDmdldEdlbkZyb21OYW1lCQDMCAIFCm9sZER1Y2tHZW4FA25pbAUDbmlsAwkAAAIFCm9sZEZhcm1HZW4FCm9sZEZhcm1HZW4EB2R1Y2tHZW4JAQ5tYW5pcHVsYXRlTmFtZQMFCm9sZER1Y2tHZW4ABgUEY2hhcgQEY2FsbAkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAhZjcmVhdGVEdWNrU3BlY2lhbEdlbmVzCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgUHZHVja0dlbgkAzAgCBQhjaGlsZHJlbgUDbmlsBQNuaWwDCQAAAgUEY2FsbAUEY2FsbAQKY2FsbFJlZHVjZQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAgxyZWR1Y2VSYXJpdHkJAMwIAgUMZmlyc3RBc3NldElkCQDMCAIFCm9sZEZhcm1HZW4FA25pbAUDbmlsAwkAAAIFCmNhbGxSZWR1Y2UFCmNhbGxSZWR1Y2UJAMwIAgkBBEJ1cm4CCQEFdmFsdWUBCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQAAQkAzAgCCQEEQnVybgIJAQV2YWx1ZQEIBQ1zZWNvbmRQYXltZW50B2Fzc2V0SWQAAQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB3ByZUluaXQACQDMCAIJAQxJbnRlZ2VyRW50cnkCAhxzdGF0aWNfQVJULUxBS0VfZmFybWluZ1Nsb3RzAMgBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhxzdGF0aWNfQVJULUxBS0VfZmFybWluZ0Jvb3N0AAIJAMwIAgkBDEludGVnZXJFbnRyeQICHXN0YXRpY19BUlQtSE9VU0VfZmFybWluZ1Nsb3RzAAQJAMwIAgkBDEludGVnZXJFbnRyeQICHXN0YXRpY19BUlQtSE9VU0VfZmFybWluZ0Jvb3N0AB4JAMwIAgkBDEludGVnZXJFbnRyeQICIHN0YXRpY19BUlQtQklHSE9VU0VfZmFybWluZ1Nsb3RzAAoJAMwIAgkBDEludGVnZXJFbnRyeQICIHN0YXRpY19BUlQtQklHSE9VU0VfZmFybWluZ0Jvb3N0AA8FA25pbAFpAQ1pc3N1ZUFydGVmYWN0AgR0eXBlCHJlY2VpdmVyAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyCQERZ2V0UmViaXJ0aEFkZHJlc3MABwkAAgECCmFkbWluIG9ubHkEB3R4SWRTdHIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQHYWRkcmVzcwkBB0FkZHJlc3MBCQDZBAEFCHJlY2VpdmVyBAhhcnRlZmFjdAkAwwgHBQR0eXBlAipORlQgYXJ0ZWZhY3Qgb2YgV2F2ZXMgRHVja3MgZ2FtZS4gRHJvcCAjMi4AAQAABwUEdW5pdAAABAphcnRlZmFjdElkCQC4CAEFCGFydGVmYWN0CQCUCgIJAMwIAgUIYXJ0ZWZhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICCWFydGVmYWN0XwkA2AQBBQphcnRlZmFjdElkAgVfdHlwZQUEdHlwZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQdhZGRyZXNzAAEFCmFydGVmYWN0SWQFA25pbAkA2AQBBQphcnRlZmFjdElkAWkBB3NldExvY2sBAW4DCQAAAggFAWkGY2FsbGVyBQR0aGlzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1nbG9iYWxfbG9ja2VkBQFuBQNuaWwJAAIBAgphZG1pbiBvbmx5AWkBC2J1eUFydGVmYWN0AAMJAGYCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcACAzI3C3C8JAAIBAiFUaGVyZSBhcmUgbm8gYWN0aXZlIHNhbGVzIG5vdy4uLiADCQBmAgkBDXRyeUdldEludGVnZXIBAg1nbG9iYWxfbG9ja2VkAAAJAAIBAh5jb250cmFjdCBpcyB0ZW1wb3JhcmlseSBsb2NrZWQDCQBnAgkBDXRyeUdldEludGVnZXIBAhBnbG9iYWxfYXJ0QW1vdW50BQ5hcnRlZmFjdHNMaW1pdAkAAgECElNPTERPVVQhISEgSHVycmF5IQMDCQBmAgCA/u+A3C8IBQlsYXN0QmxvY2sJdGltZXN0YW1wCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQUKZGV2QWRkcmVzcwcJAAIBAgxUb28gZWFybHkuLi4EDGZpcnN0UGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFDGZpcnN0UGF5bWVudAdhc3NldElkCQENZ2V0RWdnQXNzZXRJZAAJAAIBCQCsAgICPFlvdSBjYW4gYXR0YWNoIG9ubHkgRUdHIHRva2VucyB3aXRoIHRoZSBmb2xsb3dpbmcgYXNzZXQgaWQ6IAkA2AQBCQENZ2V0RWdnQXNzZXRJZAADCQBmAgUKZWdnc05lZWRlZAgFDGZpcnN0UGF5bWVudAZhbW91bnQJAAIBCQCsAgICRFRvIGhhdGNoIGEgZHVjayB5b3UgY3VycmVudGx5IG5lZWQgdGhlIGZvbGxvd2luZyBhbW91bnQgb2YgRUdHbGV0czogCQCkAwEFCmVnZ3NOZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JANgEAQgFAWkNdHJhbnNhY3Rpb25JZAIHX3N0YXR1cwIHc3RhcnRlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JANgEAQgFAWkNdHJhbnNhY3Rpb25JZAINX2ZpbmlzaEhlaWdodAkAZAIFBmhlaWdodAACCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBnbG9iYWxfYXJ0QW1vdW50CQBkAgkBDXRyeUdldEludGVnZXIBAhBnbG9iYWxfYXJ0QW1vdW50AAEFA25pbAFpARJzZXRHbG9iYWxBcnRBbW91bnQBCW5ld0Ftb3VudAMDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgkAAAIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBBQpkZXZBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBnbG9iYWxfYXJ0QW1vdW50BQluZXdBbW91bnQFA25pbAkAAgECEVBlcm1pc3Npb24gZGVuaWVkAWkBDWNsYWltQXJ0ZWZhY3QBCGJveElkU3RyBAR0eElkCQDZBAEFCGJveElkU3RyBAlzdGF0dXNLZXkJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfBQhib3hJZFN0cgIHX3N0YXR1cwQJaGVpZ2h0S2V5CQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwUIYm94SWRTdHICDV9maW5pc2hIZWlnaHQDCQECIT0CCQERQGV4dHJOYXRpdmUoMTA1OCkBBQlzdGF0dXNLZXkCB3N0YXJ0ZWQJAAIBAg9jbGFpbWVkIGFscmVhZHkDCQBmAgkBEUBleHRyTmF0aXZlKDEwNTUpAQUJaGVpZ2h0S2V5BQZoZWlnaHQJAAIBAhR5b3UgY2Fubm90IGNsYWltIHlldAQHYXJ0VHlwZQkBEWdldFJhbmRvbUFydGVmYWN0AgUEdHhJZAkBEUBleHRyTmF0aXZlKDEwNTUpAQUJaGVpZ2h0S2V5BAVhc3NldAkAwwgHBQdhcnRUeXBlAiJBcnRlZmFjdCBvZiBXYXZlcyBEdWNrcyBtZXRhdmVyc2UuAAEAAAcFBHVuaXQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFCWhlaWdodEtleQQHYXNzZXRJZAkAuAgBBQVhc3NldAkAzAgCCQELU3RyaW5nRW50cnkCBQlzdGF0dXNLZXkFB2FydFR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8FCGJveElkU3RyAgtfYXJ0ZWZhY3RJZAkA2AQBBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkA2AQBBQdhc3NldElkAgVfdHlwZQUHYXJ0VHlwZQkAzAgCBQVhc3NldAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleXETFYw=", "height": 3514701, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2pWgKnVuBCsHnHn68uFxVfjMJJ4qvPXeW1wanFokVKd8 Next: GxMPn3WhSTJVB8ycsSbTVX26JEWPsUoyP5gngHysPYNV Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func keyArtefactOwner (artefactName,owner) = (((artefactName + "_") + owner) + "_owner")
4+func staticKey_oracleAddress () = "static_oracleAddress"
55
66
7-func keyUnstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height")
7+func staticKey_breederAddress () = "static_breederAddress"
88
99
10-func keyExternalBoostDuck (duckId) = (duckId + "_duck_external_boost")
10+func staticKey_eggAssetId () = "static_eggAssetId"
1111
1212
13-func keyExternalBoostAddress (address) = (address + "_user_external_boost")
13+func staticKey_trustedContracts () = "static_trustedContracts"
1414
1515
16-func getProcessFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
16+func staticKey_rebirthAddress () = "static_rebirthAddress"
17+
18+
19+func key_artefactOwner (artefactName,owner) = (((artefactName + "_") + owner) + "_owner")
20+
21+
22+func key_unstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height")
23+
24+
25+func key_externalBoostDuck (duckId) = (duckId + "_duck_external_boost")
26+
27+
28+func key_externalBoostAddress (address) = (address + "_user_external_boost")
29+
30+
31+func key_priceCosmetic (item) = ("direct_cosmetic_" + item)
32+
33+
34+func key_maxSalesCosmetic (item) = (("direct_cosmetic_" + item) + "_max_sales")
35+
36+
37+func key_saleCosmetic (item) = (("direct_cosmetic_" + item) + "_sale")
38+
39+
40+func key_priceAssetCosmetic (item) = (("direct_cosmetic_" + item) + "_priceAsset")
41+
42+
43+func key_growPercentageCosmetic (item) = (("direct_cosmetic_" + item) + "_growing_percentage")
44+
45+
46+func key_soldCosmetic (item) = (("direct_cosmetic_" + item) + "_sold")
47+
48+
49+func key_lastPriceCosmetic (item) = (("direct_cosmetic_" + item) + "_last_price")
50+
51+
52+func key_startTsCosmetic (item) = (("direct_cosmetic_" + item) + "_startTs")
53+
54+
55+func key_endTsCosmetic (item) = (("direct_cosmetic_" + item) + "_endTs")
56+
57+
58+func key_processFinishHeight (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
1759
1860
1961 let devAddress = base58'3P44yqcpfhPF2iC1nptm2ZJCTaN7VYhz9og'
81123 }
82124
83125
84-func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
126+func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
85127
86128
87-func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
129+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
88130
89131
90-func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
132+func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
91133
92134
93-func getTrustedContracts () = tryGetStringExternal(getOracle(), "static_trustedContracts")
135+func getTrustedContracts () = tryGetStringExternal(getOracle(), staticKey_trustedContracts())
94136
95137
96-func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
97-
98-
99-func priceKey (item) = ("direct_cosmetic_" + item)
100-
101-
102-func maxSales (item) = (("direct_cosmetic_" + item) + "_max_sales")
103-
104-
105-func sale (item) = (("direct_cosmetic_" + item) + "_sale")
106-
107-
108-func priceAsset (item) = (("direct_cosmetic_" + item) + "_priceAsset")
109-
110-
111-func growPercentage (item) = (("direct_cosmetic_" + item) + "_growing_percentage")
112-
113-
114-func sold (item) = (("direct_cosmetic_" + item) + "_sold")
115-
116-
117-func lastPrice (item) = (("direct_cosmetic_" + item) + "_last_price")
138+func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_rebirthAddress())))
118139
119140
120141 func tryGetCosmeticItemPrice (item) = {
121- let key = priceKey(item)
142+ let key = key_priceCosmetic(item)
122143 match getInteger(this, key) {
123144 case a: Int =>
124145 a
148169
149170
150171 func itemIsInCoolDown (artefactName,artefactId) = {
151- let unstakeHeightLast = tryGetInteger(keyUnstakeHeight(artefactName, artefactId))
172+ let unstakeHeightLast = tryGetInteger(key_unstakeHeight(artefactName, artefactId))
152173 let cooldownPeriod = 240
153174 if ((height > (unstakeHeightLast + cooldownPeriod)))
154175 then false
159180 @Callable(i)
160181 func directBuyItem (itemName) = {
161182 let basePrice = tryGetCosmeticItemPrice(itemName)
162- let grow = tryGetInteger(growPercentage(itemName))
163- if (!(tryGetBoolean(sale(itemName))))
164- then throw(("IDBI: Item not for sale anymore" + sale(itemName)))
165- else {
166- let maxSalesValue = tryGetInteger(maxSales(itemName))
167- let soldValue = tryGetInteger(sold(itemName))
168- let price = if ((grow == 0))
169- then basePrice
170- else (basePrice + ((basePrice / 100) * (soldValue * grow)))
171- if (if ((maxSalesValue != 0))
172- then (soldValue >= maxSalesValue)
173- else false)
174- then throw("IDBI: Max editions sold!")
183+ let grow = tryGetInteger(key_growPercentageCosmetic(itemName))
184+ let startTs = tryGetInteger(key_startTsCosmetic(itemName))
185+ let endTs = tryGetInteger(key_startTsCosmetic(itemName))
186+ if (if ((startTs != 0))
187+ then (startTs > lastBlock.timestamp)
188+ else false)
189+ then throw("IDBI: The sale did not start yet!")
190+ else if (if ((endTs != 0))
191+ then (lastBlock.timestamp > endTs)
192+ else false)
193+ then throw("IDBI: The sale has already finished!")
194+ else if (!(tryGetBoolean(key_saleCosmetic(itemName))))
195+ then throw(("IDBI: Item not for sale anymore" + key_saleCosmetic(itemName)))
175196 else {
176- let assetId = if ((tryGetString(priceAsset(itemName)) == ""))
177- then getEggAssetId()
178- else fromBase58String(tryGetString(priceAsset(itemName)))
179- let amountPaidByCoupons = 0
180- let leftToPay = (price - amountPaidByCoupons)
181- let payment = if ((leftToPay != 0))
182- then {
183- let firstPayment = value(i.payments[0])
184- let amount = firstPayment.amount
185- if ((firstPayment.assetId != assetId))
186- then throw(("IDBI: You can attach only tokens with the following asset id: " + toBase58String(assetId)))
187- else if ((amount != leftToPay))
188- then throw(("IDBI: Please attach the exact asset amount" + toString(price)))
189- else leftToPay
197+ let maxSalesValue = tryGetInteger(key_maxSalesCosmetic(itemName))
198+ let soldValue = tryGetInteger(key_soldCosmetic(itemName))
199+ let price = if ((grow == 0))
200+ then basePrice
201+ else (basePrice + ((basePrice / 100) * (soldValue * grow)))
202+ if (if ((maxSalesValue != 0))
203+ then (soldValue >= maxSalesValue)
204+ else false)
205+ then throw("IDBI: Max editions sold!")
206+ else {
207+ let assetId = if ((tryGetString(key_priceAssetCosmetic(itemName)) == ""))
208+ then getEggAssetId()
209+ else fromBase58String(tryGetString(key_priceAssetCosmetic(itemName)))
210+ let amountPaidByCoupons = 0
211+ let leftToPay = (price - amountPaidByCoupons)
212+ let payment = if ((leftToPay != 0))
213+ then {
214+ let firstPayment = value(i.payments[0])
215+ let amount = firstPayment.amount
216+ if ((firstPayment.assetId != assetId))
217+ then throw(("IDBI: You can attach only tokens with the following asset id: " + toBase58String(assetId)))
218+ else if ((amount != leftToPay))
219+ then throw(("IDBI: Please attach the exact asset amount" + toString(price)))
220+ else leftToPay
221+ }
222+ else 0
223+ if ((payment == payment))
224+ then {
225+ let txIdStr = toBase58String(i.transactionId)
226+ let address = i.originCaller
227+ let artefact = Issue(itemName, ("NFT artefact of Waves Ducks game: " + itemName), 1, 0, false, unit, 0)
228+ let artefactId = calculateAssetId(artefact)
229+ $Tuple2([artefact, StringEntry((("artefact_" + toBase58String(artefactId)) + "_type"), itemName), IntegerEntry(key_lastPriceCosmetic(itemName), price), IntegerEntry(key_soldCosmetic(itemName), (soldValue + 1)), ScriptTransfer(address, 1, artefactId)], toBase58String(artefactId))
230+ }
231+ else throw("Strict value is not equal to itself.")
190232 }
191- else 0
192- if ((payment == payment))
193- then {
194- let txIdStr = toBase58String(i.transactionId)
195- let address = i.originCaller
196- let artefact = Issue(itemName, ("NFT artefact of Waves Ducks game: " + itemName), 1, 0, false, unit, 0)
197- let artefactId = calculateAssetId(artefact)
198- $Tuple2([artefact, StringEntry((("artefact_" + toBase58String(artefactId)) + "_type"), itemName), IntegerEntry(lastPrice(itemName), price), IntegerEntry(sold(itemName), (soldValue + 1)), ScriptTransfer(address, 1, artefactId)], toBase58String(artefactId))
199- }
200- else throw("Strict value is not equal to itself.")
201233 }
202- }
203234 }
204235
205236
212243 if ((indexOf(allowedContractsList, dappToCall) == unit))
213244 then throw("IMB: This smart contract can't manipulate the boost!")
214245 else {
215- let key = keyExternalBoostDuck(duckId)
246+ let key = key_externalBoostDuck(duckId)
216247 let activeBoost = tryGetInteger(key)
217248 let newBoost = (activeBoost + boost)
218249 if ((0 > newBoost))
231262 if ((indexOf(allowedContractsList, dappToCall) == unit))
232263 then throw("IMBA: This smart contract can't manipulate the boost!")
233264 else {
234- let key = keyExternalBoostAddress(address)
265+ let key = key_externalBoostAddress(address)
235266 let activeBoost = tryGetInteger(key)
236267 let newBoost = (activeBoost + boost)
237268 if ((0 > newBoost))
260291 @Callable(i)
261292 func configureOracle (oracle) = if ((i.caller != this))
262293 then throw("admin only")
263- else [StringEntry("static_oracleAddress", oracle)]
294+ else [StringEntry(staticKey_oracleAddress(), oracle)]
264295
265296
266297
267298 @Callable(i)
268299 func calculateFarmingPowerBoost (duckId,address) = {
269- let externalBoostDuck = tryGetInteger(keyExternalBoostDuck(duckId))
270- let externalBoostAddress = tryGetInteger(keyExternalBoostAddress(address))
300+ let externalBoostDuck = tryGetInteger(key_externalBoostDuck(duckId))
301+ let externalBoostAddress = tryGetInteger(key_externalBoostAddress(address))
271302 let totalBoost = (externalBoostDuck + externalBoostAddress)
272303 $Tuple2([IntegerEntry((duckId + "_last_boost"), totalBoost)], totalBoost)
273304 }
287318 then throw("You need to attach a ART-FIXGENE artefact")
288319 else {
289320 let txId = fromBase58String(txIdStr)
290- let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
321+ let finishHeightKey = key_processFinishHeight(toString(i.caller), txId)
291322 let processFinishHeight = getIntegerValue(getBreederAddress(), finishHeightKey)
292323 let duckGenesString = asString(invoke(getBreederAddress(), "generateDuck", [txId, processFinishHeight, parentFixedGene, positionFixedGene, "", 0], nil))
293324 if ((duckGenesString == duckGenesString))
318349 then throw("You need to attach a ART-FREEGENE artefact")
319350 else {
320351 let txId = fromBase58String(txIdStr)
321- let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
352+ let finishHeightKey = key_processFinishHeight(toString(i.caller), txId)
322353 let processFinishHeight = getIntegerValue(getBreederAddress(), finishHeightKey)
323354 let selectedGene = getRandomGenes(txId, processFinishHeight)
324355 let randomPosition = getRandomNumber(7, txId, processFinishHeight, 3)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func keyArtefactOwner (artefactName,owner) = (((artefactName + "_") + owner) + "_owner")
4+func staticKey_oracleAddress () = "static_oracleAddress"
55
66
7-func keyUnstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height")
7+func staticKey_breederAddress () = "static_breederAddress"
88
99
10-func keyExternalBoostDuck (duckId) = (duckId + "_duck_external_boost")
10+func staticKey_eggAssetId () = "static_eggAssetId"
1111
1212
13-func keyExternalBoostAddress (address) = (address + "_user_external_boost")
13+func staticKey_trustedContracts () = "static_trustedContracts"
1414
1515
16-func getProcessFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
16+func staticKey_rebirthAddress () = "static_rebirthAddress"
17+
18+
19+func key_artefactOwner (artefactName,owner) = (((artefactName + "_") + owner) + "_owner")
20+
21+
22+func key_unstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height")
23+
24+
25+func key_externalBoostDuck (duckId) = (duckId + "_duck_external_boost")
26+
27+
28+func key_externalBoostAddress (address) = (address + "_user_external_boost")
29+
30+
31+func key_priceCosmetic (item) = ("direct_cosmetic_" + item)
32+
33+
34+func key_maxSalesCosmetic (item) = (("direct_cosmetic_" + item) + "_max_sales")
35+
36+
37+func key_saleCosmetic (item) = (("direct_cosmetic_" + item) + "_sale")
38+
39+
40+func key_priceAssetCosmetic (item) = (("direct_cosmetic_" + item) + "_priceAsset")
41+
42+
43+func key_growPercentageCosmetic (item) = (("direct_cosmetic_" + item) + "_growing_percentage")
44+
45+
46+func key_soldCosmetic (item) = (("direct_cosmetic_" + item) + "_sold")
47+
48+
49+func key_lastPriceCosmetic (item) = (("direct_cosmetic_" + item) + "_last_price")
50+
51+
52+func key_startTsCosmetic (item) = (("direct_cosmetic_" + item) + "_startTs")
53+
54+
55+func key_endTsCosmetic (item) = (("direct_cosmetic_" + item) + "_endTs")
56+
57+
58+func key_processFinishHeight (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
1759
1860
1961 let devAddress = base58'3P44yqcpfhPF2iC1nptm2ZJCTaN7VYhz9og'
2062
2163 let eggsNeeded = (3 * 100000000)
2264
2365 let artefactsLimit = (301 + 600)
2466
2567 let freeGenes = ["A", "B", "C", "D", "E", "F"]
2668
2769 let oldArtefacts = ["ART-LAKE", "ART-HOUSE", "ART-BIGHOUSE", "ART-FIXGENE", "ART-FREEGENE", "ART-MIRROR", "ART-POMP", "ART-CAPE", "ART-HAT", "ART-CUSTOMDUCK"]
2870
2971 let artefacts = ["ART-XMISTL", "ART-XHAT", "ART-XSCARF", "ART-XSWEATER", "ART-XSOCK", "ART-XTREE"]
3072
3173 let allArtefact = (artefacts ++ oldArtefacts)
3274
3375 func tryGetBoolean (key) = match getBoolean(this, key) {
3476 case b: Boolean =>
3577 b
3678 case _ =>
3779 false
3880 }
3981
4082
4183 func tryGetString (key) = match getString(this, key) {
4284 case a: String =>
4385 a
4486 case _ =>
4587 ""
4688 }
4789
4890
4991 func tryGetInteger (key) = match getInteger(this, key) {
5092 case a: Int =>
5193 a
5294 case _ =>
5395 0
5496 }
5597
5698
5799 func getRandomNumber (variants,txId,finishHeight,offset) = {
58100 let randomSeedBlock = value(blockInfoByHeight((finishHeight - 1)))
59101 let randomHash = sha256(((base58'items' + txId) + value(randomSeedBlock.vrf)))
60102 (toInt(randomHash, offset) % variants)
61103 }
62104
63105
64106 func getRandomArtefact (boxId,h) = {
65107 let randomNumber = getRandomNumber(6, boxId, h, 1)
66108 artefacts[randomNumber]
67109 }
68110
69111
70112 func getRandomGenes (txId,h) = {
71113 let randomNumber = getRandomNumber(6, txId, h, 2)
72114 freeGenes[randomNumber]
73115 }
74116
75117
76118 func tryGetStringExternal (address,key) = match getString(address, key) {
77119 case a: String =>
78120 a
79121 case _ =>
80122 ""
81123 }
82124
83125
84-func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
126+func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
85127
86128
87-func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
129+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
88130
89131
90-func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
132+func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
91133
92134
93-func getTrustedContracts () = tryGetStringExternal(getOracle(), "static_trustedContracts")
135+func getTrustedContracts () = tryGetStringExternal(getOracle(), staticKey_trustedContracts())
94136
95137
96-func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
97-
98-
99-func priceKey (item) = ("direct_cosmetic_" + item)
100-
101-
102-func maxSales (item) = (("direct_cosmetic_" + item) + "_max_sales")
103-
104-
105-func sale (item) = (("direct_cosmetic_" + item) + "_sale")
106-
107-
108-func priceAsset (item) = (("direct_cosmetic_" + item) + "_priceAsset")
109-
110-
111-func growPercentage (item) = (("direct_cosmetic_" + item) + "_growing_percentage")
112-
113-
114-func sold (item) = (("direct_cosmetic_" + item) + "_sold")
115-
116-
117-func lastPrice (item) = (("direct_cosmetic_" + item) + "_last_price")
138+func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_rebirthAddress())))
118139
119140
120141 func tryGetCosmeticItemPrice (item) = {
121- let key = priceKey(item)
142+ let key = key_priceCosmetic(item)
122143 match getInteger(this, key) {
123144 case a: Int =>
124145 a
125146 case _ =>
126147 throw("ITGCIP: This item is not available in the store!")
127148 }
128149 }
129150
130151
131152 func asString (value) = match value {
132153 case string: String =>
133154 string
134155 case _ =>
135156 throw("wrong type, expected: String")
136157 }
137158
138159
139160 func asInt (value) = match value {
140161 case int: Int =>
141162 int
142163 case _ =>
143164 throw("wrong type, expected: Int")
144165 }
145166
146167
147168 func manipulateName (assetName,position,char) = ((take(assetName, (position - 1)) + char) + takeRight(assetName, (16 - position)))
148169
149170
150171 func itemIsInCoolDown (artefactName,artefactId) = {
151- let unstakeHeightLast = tryGetInteger(keyUnstakeHeight(artefactName, artefactId))
172+ let unstakeHeightLast = tryGetInteger(key_unstakeHeight(artefactName, artefactId))
152173 let cooldownPeriod = 240
153174 if ((height > (unstakeHeightLast + cooldownPeriod)))
154175 then false
155176 else true
156177 }
157178
158179
159180 @Callable(i)
160181 func directBuyItem (itemName) = {
161182 let basePrice = tryGetCosmeticItemPrice(itemName)
162- let grow = tryGetInteger(growPercentage(itemName))
163- if (!(tryGetBoolean(sale(itemName))))
164- then throw(("IDBI: Item not for sale anymore" + sale(itemName)))
165- else {
166- let maxSalesValue = tryGetInteger(maxSales(itemName))
167- let soldValue = tryGetInteger(sold(itemName))
168- let price = if ((grow == 0))
169- then basePrice
170- else (basePrice + ((basePrice / 100) * (soldValue * grow)))
171- if (if ((maxSalesValue != 0))
172- then (soldValue >= maxSalesValue)
173- else false)
174- then throw("IDBI: Max editions sold!")
183+ let grow = tryGetInteger(key_growPercentageCosmetic(itemName))
184+ let startTs = tryGetInteger(key_startTsCosmetic(itemName))
185+ let endTs = tryGetInteger(key_startTsCosmetic(itemName))
186+ if (if ((startTs != 0))
187+ then (startTs > lastBlock.timestamp)
188+ else false)
189+ then throw("IDBI: The sale did not start yet!")
190+ else if (if ((endTs != 0))
191+ then (lastBlock.timestamp > endTs)
192+ else false)
193+ then throw("IDBI: The sale has already finished!")
194+ else if (!(tryGetBoolean(key_saleCosmetic(itemName))))
195+ then throw(("IDBI: Item not for sale anymore" + key_saleCosmetic(itemName)))
175196 else {
176- let assetId = if ((tryGetString(priceAsset(itemName)) == ""))
177- then getEggAssetId()
178- else fromBase58String(tryGetString(priceAsset(itemName)))
179- let amountPaidByCoupons = 0
180- let leftToPay = (price - amountPaidByCoupons)
181- let payment = if ((leftToPay != 0))
182- then {
183- let firstPayment = value(i.payments[0])
184- let amount = firstPayment.amount
185- if ((firstPayment.assetId != assetId))
186- then throw(("IDBI: You can attach only tokens with the following asset id: " + toBase58String(assetId)))
187- else if ((amount != leftToPay))
188- then throw(("IDBI: Please attach the exact asset amount" + toString(price)))
189- else leftToPay
197+ let maxSalesValue = tryGetInteger(key_maxSalesCosmetic(itemName))
198+ let soldValue = tryGetInteger(key_soldCosmetic(itemName))
199+ let price = if ((grow == 0))
200+ then basePrice
201+ else (basePrice + ((basePrice / 100) * (soldValue * grow)))
202+ if (if ((maxSalesValue != 0))
203+ then (soldValue >= maxSalesValue)
204+ else false)
205+ then throw("IDBI: Max editions sold!")
206+ else {
207+ let assetId = if ((tryGetString(key_priceAssetCosmetic(itemName)) == ""))
208+ then getEggAssetId()
209+ else fromBase58String(tryGetString(key_priceAssetCosmetic(itemName)))
210+ let amountPaidByCoupons = 0
211+ let leftToPay = (price - amountPaidByCoupons)
212+ let payment = if ((leftToPay != 0))
213+ then {
214+ let firstPayment = value(i.payments[0])
215+ let amount = firstPayment.amount
216+ if ((firstPayment.assetId != assetId))
217+ then throw(("IDBI: You can attach only tokens with the following asset id: " + toBase58String(assetId)))
218+ else if ((amount != leftToPay))
219+ then throw(("IDBI: Please attach the exact asset amount" + toString(price)))
220+ else leftToPay
221+ }
222+ else 0
223+ if ((payment == payment))
224+ then {
225+ let txIdStr = toBase58String(i.transactionId)
226+ let address = i.originCaller
227+ let artefact = Issue(itemName, ("NFT artefact of Waves Ducks game: " + itemName), 1, 0, false, unit, 0)
228+ let artefactId = calculateAssetId(artefact)
229+ $Tuple2([artefact, StringEntry((("artefact_" + toBase58String(artefactId)) + "_type"), itemName), IntegerEntry(key_lastPriceCosmetic(itemName), price), IntegerEntry(key_soldCosmetic(itemName), (soldValue + 1)), ScriptTransfer(address, 1, artefactId)], toBase58String(artefactId))
230+ }
231+ else throw("Strict value is not equal to itself.")
190232 }
191- else 0
192- if ((payment == payment))
193- then {
194- let txIdStr = toBase58String(i.transactionId)
195- let address = i.originCaller
196- let artefact = Issue(itemName, ("NFT artefact of Waves Ducks game: " + itemName), 1, 0, false, unit, 0)
197- let artefactId = calculateAssetId(artefact)
198- $Tuple2([artefact, StringEntry((("artefact_" + toBase58String(artefactId)) + "_type"), itemName), IntegerEntry(lastPrice(itemName), price), IntegerEntry(sold(itemName), (soldValue + 1)), ScriptTransfer(address, 1, artefactId)], toBase58String(artefactId))
199- }
200- else throw("Strict value is not equal to itself.")
201233 }
202- }
203234 }
204235
205236
206237
207238 @Callable(i)
208239 func manipulateBoost (boost,duckId) = {
209240 let allowedContracts = getTrustedContracts()
210241 let allowedContractsList = split(allowedContracts, ";")
211242 let dappToCall = toString(i.caller)
212243 if ((indexOf(allowedContractsList, dappToCall) == unit))
213244 then throw("IMB: This smart contract can't manipulate the boost!")
214245 else {
215- let key = keyExternalBoostDuck(duckId)
246+ let key = key_externalBoostDuck(duckId)
216247 let activeBoost = tryGetInteger(key)
217248 let newBoost = (activeBoost + boost)
218249 if ((0 > newBoost))
219250 then throw("IMB: Something went wrong with boost, please contact the admins!")
220251 else [IntegerEntry(key, newBoost)]
221252 }
222253 }
223254
224255
225256
226257 @Callable(i)
227258 func manipulateBoostAccount (boost,address) = {
228259 let allowedContracts = getTrustedContracts()
229260 let allowedContractsList = split(allowedContracts, ";")
230261 let dappToCall = toString(i.caller)
231262 if ((indexOf(allowedContractsList, dappToCall) == unit))
232263 then throw("IMBA: This smart contract can't manipulate the boost!")
233264 else {
234- let key = keyExternalBoostAddress(address)
265+ let key = key_externalBoostAddress(address)
235266 let activeBoost = tryGetInteger(key)
236267 let newBoost = (activeBoost + boost)
237268 if ((0 > newBoost))
238269 then throw("IMBA: Something went wrong with boost, please contact the admins!")
239270 else [IntegerEntry(key, newBoost)]
240271 }
241272 }
242273
243274
244275
245276 @Callable(i)
246277 func checkArtefactDetails (assetId) = {
247278 let asset = value(assetInfo(fromBase58String(assetId)))
248279 let assetName = value(asset.name)
249280 if (if (if (containsElement(allArtefact, assetName))
250281 then true
251282 else isDefined(tryGetCosmeticItemPrice(assetName)))
252283 then (asset.issuer == this)
253284 else false)
254285 then $Tuple2(nil, assetName)
255286 else throw("Invalid artefact")
256287 }
257288
258289
259290
260291 @Callable(i)
261292 func configureOracle (oracle) = if ((i.caller != this))
262293 then throw("admin only")
263- else [StringEntry("static_oracleAddress", oracle)]
294+ else [StringEntry(staticKey_oracleAddress(), oracle)]
264295
265296
266297
267298 @Callable(i)
268299 func calculateFarmingPowerBoost (duckId,address) = {
269- let externalBoostDuck = tryGetInteger(keyExternalBoostDuck(duckId))
270- let externalBoostAddress = tryGetInteger(keyExternalBoostAddress(address))
300+ let externalBoostDuck = tryGetInteger(key_externalBoostDuck(duckId))
301+ let externalBoostAddress = tryGetInteger(key_externalBoostAddress(address))
271302 let totalBoost = (externalBoostDuck + externalBoostAddress)
272303 $Tuple2([IntegerEntry((duckId + "_last_boost"), totalBoost)], totalBoost)
273304 }
274305
275306
276307
277308 @Callable(i)
278309 func fixedGene (txIdStr,parentFixedGene,positionFixedGene) = {
279310 let firstPayment = value(i.payments[0])
280311 let firstAssetId = toBase58String(value(firstPayment.assetId))
281312 if ((firstPayment.amount != 1))
282313 then throw("NFT is not attached")
283314 else {
284315 let artefact = asString(invoke(this, "checkArtefactDetails", [firstAssetId], nil))
285316 if ((artefact == artefact))
286317 then if ((artefact != "ART-FIXGENE"))
287318 then throw("You need to attach a ART-FIXGENE artefact")
288319 else {
289320 let txId = fromBase58String(txIdStr)
290- let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
321+ let finishHeightKey = key_processFinishHeight(toString(i.caller), txId)
291322 let processFinishHeight = getIntegerValue(getBreederAddress(), finishHeightKey)
292323 let duckGenesString = asString(invoke(getBreederAddress(), "generateDuck", [txId, processFinishHeight, parentFixedGene, positionFixedGene, "", 0], nil))
293324 if ((duckGenesString == duckGenesString))
294325 then {
295326 let call = invoke(getBreederAddress(), "finishDuckHatchingItems", [txIdStr, duckGenesString], nil)
296327 if ((call == call))
297328 then [Burn(value(firstPayment.assetId), 1)]
298329 else throw("Strict value is not equal to itself.")
299330 }
300331 else throw("Strict value is not equal to itself.")
301332 }
302333 else throw("Strict value is not equal to itself.")
303334 }
304335 }
305336
306337
307338
308339 @Callable(i)
309340 func freeGene (txIdStr) = {
310341 let firstPayment = value(i.payments[0])
311342 let firstAssetId = toBase58String(value(firstPayment.assetId))
312343 if ((firstPayment.amount != 1))
313344 then throw("NFT is not attached")
314345 else {
315346 let artefact = asString(invoke(this, "checkArtefactDetails", [firstAssetId], nil))
316347 if ((artefact == artefact))
317348 then if ((artefact != "ART-FREEGENE"))
318349 then throw("You need to attach a ART-FREEGENE artefact")
319350 else {
320351 let txId = fromBase58String(txIdStr)
321- let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
352+ let finishHeightKey = key_processFinishHeight(toString(i.caller), txId)
322353 let processFinishHeight = getIntegerValue(getBreederAddress(), finishHeightKey)
323354 let selectedGene = getRandomGenes(txId, processFinishHeight)
324355 let randomPosition = getRandomNumber(7, txId, processFinishHeight, 3)
325356 let duckGenesString = asString(invoke(getBreederAddress(), "generateDuck", [txId, processFinishHeight, 0, 0, selectedGene, randomPosition], nil))
326357 if ((duckGenesString == duckGenesString))
327358 then {
328359 let call = invoke(getBreederAddress(), "finishDuckHatchingItems", [txIdStr, duckGenesString], nil)
329360 if ((call == call))
330361 then [Burn(value(firstPayment.assetId), 1)]
331362 else throw("Strict value is not equal to itself.")
332363 }
333364 else throw("Strict value is not equal to itself.")
334365 }
335366 else throw("Strict value is not equal to itself.")
336367 }
337368 }
338369
339370
340371
341372 @Callable(i)
342373 func copyDuck () = {
343374 let firstPayment = value(i.payments[0])
344375 let secondPayment = value(i.payments[1])
345376 let firstAssetId = toBase58String(value(firstPayment.assetId))
346377 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [firstAssetId], nil))
347378 if ((children == children))
348379 then if (if ((firstPayment.amount != 1))
349380 then true
350381 else (secondPayment.amount != 1))
351382 then throw("NFT is not attached")
352383 else {
353384 let artefact = asString(invoke(this, "checkArtefactDetails", [toBase58String(value(secondPayment.assetId))], nil))
354385 if ((artefact == artefact))
355386 then if ((artefact != "ART-MIRROR"))
356387 then throw("You need to attach a ART-MIRROR artefact")
357388 else {
358389 let nftInfo = value(assetInfo(value(firstPayment.assetId)))
359390 let asset1Gen = split(nftInfo.name, "")
360391 if (if ((asset1Gen[14] == "G"))
361392 then true
362393 else (asset1Gen[14] == "J"))
363394 then throw("You can't mirror this duck")
364395 else {
365396 let duckGen = nftInfo.name
366397 let call = invoke(getBreederAddress(), "createDuckSpecialGenes", [i.caller.bytes, duckGen, children], nil)
367398 if ((call == call))
368399 then [ScriptTransfer(i.caller, 1, firstPayment.assetId), Burn(value(secondPayment.assetId), 1)]
369400 else throw("Strict value is not equal to itself.")
370401 }
371402 }
372403 else throw("Strict value is not equal to itself.")
373404 }
374405 else throw("Strict value is not equal to itself.")
375406 }
376407
377408
378409
379410 @Callable(i)
380411 func addArteFactToDuck () = {
381412 let firstPayment = value(i.payments[0])
382413 let secondPayment = value(i.payments[1])
383414 let firstAssetId = toBase58String(value(firstPayment.assetId))
384415 if (if ((firstPayment.amount != 1))
385416 then true
386417 else (secondPayment.amount != 1))
387418 then throw("NFT is not attached")
388419 else {
389420 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [firstAssetId], nil))
390421 if ((children == children))
391422 then if ((children == 0))
392423 then throw("You can only pick a sterile NFT-duck")
393424 else {
394425 let artefact = asString(invoke(this, "checkArtefactDetails", [toBase58String(value(secondPayment.assetId))], nil))
395426 if ((artefact == artefact))
396427 then if (if ((artefact != "ART-XHAT"))
397428 then (artefact != "ART-POMP")
398429 else false)
399430 then throw("You need to attach a ART-XHAT or ART-POMP artefact")
400431 else {
401432 let nftInfo = value(assetInfo(value(firstPayment.assetId)))
402433 let asset1Gen = split(nftInfo.name, "")
403434 if (if ((asset1Gen[14] == "G"))
404435 then true
405436 else (asset1Gen[14] == "J"))
406437 then throw("You can't mirror this duck")
407438 else if (if ((asset1Gen[5] == "S"))
408439 then true
409440 else (asset1Gen[5] == "T"))
410441 then throw("you already attached a artefact")
411442 else {
412443 let char = if ((artefact == "ART-XHAT"))
413444 then "T"
414445 else if ((artefact == "ART-POMP"))
415446 then "S"
416447 else throw("No char defined")
417448 let oldDuckGen = nftInfo.name
418449 let oldFarmGen = asString(invoke(getBreederAddress(), "getGenFromName", [oldDuckGen], nil))
419450 if ((oldFarmGen == oldFarmGen))
420451 then {
421452 let duckGen = manipulateName(oldDuckGen, 6, char)
422453 let call = invoke(getBreederAddress(), "createDuckSpecialGenes", [i.caller.bytes, duckGen, children], nil)
423454 if ((call == call))
424455 then {
425456 let callReduce = invoke(getBreederAddress(), "reduceRarity", [firstAssetId, oldFarmGen], nil)
426457 if ((callReduce == callReduce))
427458 then [Burn(value(firstPayment.assetId), 1), Burn(value(secondPayment.assetId), 1)]
428459 else throw("Strict value is not equal to itself.")
429460 }
430461 else throw("Strict value is not equal to itself.")
431462 }
432463 else throw("Strict value is not equal to itself.")
433464 }
434465 }
435466 else throw("Strict value is not equal to itself.")
436467 }
437468 else throw("Strict value is not equal to itself.")
438469 }
439470 }
440471
441472
442473
443474 @Callable(i)
444475 func preInit () = [IntegerEntry("static_ART-LAKE_farmingSlots", 200), IntegerEntry("static_ART-LAKE_farmingBoost", 2), IntegerEntry("static_ART-HOUSE_farmingSlots", 4), IntegerEntry("static_ART-HOUSE_farmingBoost", 30), IntegerEntry("static_ART-BIGHOUSE_farmingSlots", 10), IntegerEntry("static_ART-BIGHOUSE_farmingBoost", 15)]
445476
446477
447478
448479 @Callable(i)
449480 func issueArtefact (type,receiver) = if (if ((i.caller != this))
450481 then (i.caller != getRebirthAddress())
451482 else false)
452483 then throw("admin only")
453484 else {
454485 let txIdStr = toBase58String(i.transactionId)
455486 let address = Address(fromBase58String(receiver))
456487 let artefact = Issue(type, "NFT artefact of Waves Ducks game. Drop #2.", 1, 0, false, unit, 0)
457488 let artefactId = calculateAssetId(artefact)
458489 $Tuple2([artefact, StringEntry((("artefact_" + toBase58String(artefactId)) + "_type"), type), ScriptTransfer(address, 1, artefactId)], toBase58String(artefactId))
459490 }
460491
461492
462493
463494 @Callable(i)
464495 func setLock (n) = if ((i.caller == this))
465496 then [IntegerEntry("global_locked", n)]
466497 else throw("admin only")
467498
468499
469500
470501 @Callable(i)
471502 func buyArtefact () = if ((lastBlock.timestamp > 1639742400000))
472503 then throw("There are no active sales now... ")
473504 else if ((tryGetInteger("global_locked") > 0))
474505 then throw("contract is temporarily locked")
475506 else if ((tryGetInteger("global_artAmount") >= artefactsLimit))
476507 then throw("SOLDOUT!!! Hurray!")
477508 else if (if ((1639605600000 > lastBlock.timestamp))
478509 then (i.caller != Address(devAddress))
479510 else false)
480511 then throw("Too early...")
481512 else {
482513 let firstPayment = value(i.payments[0])
483514 if ((firstPayment.assetId != getEggAssetId()))
484515 then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
485516 else if ((eggsNeeded > firstPayment.amount))
486517 then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
487518 else [StringEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_status"), "started"), IntegerEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_finishHeight"), (height + 2)), IntegerEntry("global_artAmount", (tryGetInteger("global_artAmount") + 1))]
488519 }
489520
490521
491522
492523 @Callable(i)
493524 func setGlobalArtAmount (newAmount) = if (if ((i.caller == this))
494525 then true
495526 else (i.caller == Address(devAddress)))
496527 then [IntegerEntry("global_artAmount", newAmount)]
497528 else throw("Permission denied")
498529
499530
500531
501532 @Callable(i)
502533 func claimArtefact (boxIdStr) = {
503534 let txId = fromBase58String(boxIdStr)
504535 let statusKey = (((toString(i.caller) + "_") + boxIdStr) + "_status")
505536 let heightKey = (((toString(i.caller) + "_") + boxIdStr) + "_finishHeight")
506537 if ((getStringValue(statusKey) != "started"))
507538 then throw("claimed already")
508539 else if ((getIntegerValue(heightKey) > height))
509540 then throw("you cannot claim yet")
510541 else {
511542 let artType = getRandomArtefact(txId, getIntegerValue(heightKey))
512543 let asset = Issue(artType, "Artefact of Waves Ducks metaverse.", 1, 0, false, unit, getIntegerValue(heightKey))
513544 let assetId = calculateAssetId(asset)
514545 [StringEntry(statusKey, artType), StringEntry((((toString(i.caller) + "_") + boxIdStr) + "_artefactId"), toBase58String(assetId)), StringEntry((toBase58String(assetId) + "_type"), artType), asset, ScriptTransfer(i.caller, 1, assetId)]
515546 }
516547 }
517548
518549
519550 @Verifier(tx)
520551 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
521552

github/deemru/w8io/3ef1775 
97.85 ms