tx · B2WvBBewuyAuWfpZ9GxoG5bjbm73RWJdx3SK5jMRJT9w

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.02300000 Waves

2023.01.02 22:19 [2387758] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "B2WvBBewuyAuWfpZ9GxoG5bjbm73RWJdx3SK5jMRJT9w", "fee": 2300000, "feeAssetId": null, "timestamp": 1672687136413, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "24G82uwtjiJfLHXvNKDE8vJLwAPZ4qCHERwJQJv2vc4oZaRQFgdqnqFd2xiis3HJh2FdLuqufUSiQ3KdzLm2HMyy" ], "script": "base64:BgJECAISABIDCgEIEgASAwoBCBIECgIBCBIECgICAhIECgIBCBIECgIBARIECgIICBIECgICAhIECgICAhIDCgEIEgMKAQhDAAVjaGFpbgkAsAkBCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2RuQXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgIBVwUHJG1hdGNoMAEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEDCQAAAgIBVAUHJG1hdGNoMAEg93bq9/eDymXbbhPuAjvPWCmVqcHRjfJL2mzYHWKAyN4JAAIBAg1Vbmtub3duIGNoYWluAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAgFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAgFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAICAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAICAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAAtlY29ub215QWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgIBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1Ayc2sxS25jU3hSYVpzOGI0Q1dHUHcyamt2dmF2NzR1NEQDCQAAAgIBVAUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM044eTR3eFgzSkM0VGRyQ0pCWFgxNlNqV2Y2WDI1NmhyZXAJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhIRUFMQ09TVACQTgAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EABk5VTVJFUwAGAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAJREFZTUlMTElTAIC4mSkAEUZJVkVNSU5VVEVTTUlMTElTAOCnEgAQUkVTT1VSQ0VQUklDRU1JTgDV1gkAEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAgFXBQckbWF0Y2gwANHCwr5GAwkAAAICAVQFByRtYXRjaDAA0OmcWgkAAgECDVVua25vd24gY2hhaW4AFUluZnJhVXBncmFkZUNvc3RTVXNkbgQHJG1hdGNoMAUFY2hhaW4DCQAAAgIBVwUHJG1hdGNoMACAnJw5AwkAAAICAVQFByRtYXRjaDAAgJ9JCQACAQINVW5rbm93biBjaGFpbgAMRVhQTUFURVJJQUxTBAckbWF0Y2gwBQVjaGFpbgMJAAACAgFXBQckbWF0Y2gwAMuA1bPLBAMJAAACAgFUBQckbWF0Y2gwAPGa8O8FCQACAQINVW5rbm93biBjaGFpbgAHRVhQVVNETgQHJG1hdGNoMAUFY2hhaW4DCQAAAgIBVwUHJG1hdGNoMACAlOvcAwMJAAACAgFUBQckbWF0Y2gwAICt4gQJAAIBAg1Vbmtub3duIGNoYWluAAVNVUxUNgDAhD0ABUZJVkVYCQC2AgEABQAHVFdFTlRZWAkAtgIBABQACFRXRU5UWTJYCQC2AgEJAGgCABQAFAAIVFdFTlRZM1gJALYCAQkAaAIJAGgCABQAFAAUAAhUV0VOVFk0WAkAtgIBCQBoAgkAaAIJAGgCABQAFAAUABQACFRXRU5UWTVYCQC2AgEJAGgCCQBoAgkAaAIJAGgCABQAFAAUABQAFAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAKY29udGluZW50cwkAzAgCAgRBc2lhCQDMCAICBkV1cm9wZQkAzAgCAghBbWVyaWNhcwkAzAgCAgdPY2VhbmlhCQDMCAICBkFmcmljYQUDbmlsARJrZXlOZXh0RnJlZUxhbmROdW0AAgtuZXh0TGFuZE51bQEQa2V5TGFuZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgxsYW5kVG9Bc3NldF8FB2xhbmROdW0BCmtleU5mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgERa2V5TGFuZE51bVRvT3duZXIBB2xhbmROdW0JAKwCAgIKbGFuZE93bmVyXwUHbGFuZE51bQERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBEmdldE5lZWRlZE1hdGVyaWFscwEFdG90YWwEBXByb3BzCQC1CQIJAQV2YWx1ZQEJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAIBXwMJAQIhPQIJAJADAQUFcHJvcHMFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEEAXIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAAJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAMJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAQJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAUFA25pbAQDc3VtCQBkAgkAZAIJAGQCCQBkAgkAZAIJAJEDAgUBcgAACQCRAwIFAXIAAQkAkQMCBQFyAAIJAJEDAgUBcgADCQCRAwIFAXIABAkAkQMCBQFyAAUDCQBnAgAABQNzdW0JAAIBAg9ObyBsYW5kcyBzdGFrZWQEBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUBcgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgERc3VidHJhY3RNYXRlcmlhbHMDDHNob3VsZFVzZU1hdANoYXMJdG90YWxOZWVkBARuZWVkCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJdG90YWxOZWVkCgEKc3VidHJhY3RvcgIDYWNjA2lkeAQGcmVzdWx0CQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2hhcwUDaWR4CQCRAwIFBG5lZWQFA2lkeAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhOb3QgZW5vdWdoIG1hdGVyaWFsIGlkeD0JAKQDAQUDaWR4AgssIHlvdSBoYXZlIAkAkQMCBQNoYXMFA2lkeAILLCBidXQgbmVlZCAJAKQDAQkAkQMCBQRuZWVkBQNpZHgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAMFDHNob3VsZFVzZU1hdAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnN1YnRyYWN0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYFA2hhcwERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAVwcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQoBB3VwZGF0ZXICA2FjYwFpBAZyZXN1bHQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMFAWkJAGgCCQBoAgUEc2lnbgkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZQYW5pYyEgUGllY2VzIG9mIHR5cGU9CQCkAwEFAWkCBywgc2lnbj0JAKQDAQUEc2lnbgIULCAgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAQBcgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAAZAwkAAAICAU0FByRtYXRjaDAAZAMJAAACAgFM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XzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBEGV4cGVkaXRpb25Db21tb24FDHNob3VsZFVzZU1hdAZjYWxsZXIEdHhJZAdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgE7BAJocAkAtQkCCQCRAwIJALUJAgkAkQMCBQVwYXJ0cwAAAgF8AAACAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBApsb2NBbmRUaW1lCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQOdGFyZ2V0TG9jYXRpb24JALUJAgkAkQMCBQpsb2NBbmRUaW1lAAACAV8DCQECIT0CCQCRAwIFDnRhcmdldExvY2F0aW9uAAECAUUJAAIBAitleHBlZGl0aW9uIHRhcmdldCBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBFBAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKbG9jQW5kVGltZQABAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBAhJzaWduYXR1cmUgb3V0ZGF0ZWQECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoAwkAZwIAAAUFbmV3SFAJAAIBAitZb3VyIGR1Y2sgaGVhbHRoIGlzIHplcm8sIGV4cGVkaXRpb24gZmFpbGVkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQxFWFBNQVRFUklBTFMCAV8EBmJpZ051bQkBA2FicwEJAJ4DAQUEdHhJZAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAD1AwQHbGFuZE51bQkApAMBBQdmcmVlTnVtBAxjb250aW5lbnRJZHgJAKADAQkAuwICBQZiaWdOdW0FBUZJVkVYBAFmCQCRAwIFBGZyZXEFDGNvbnRpbmVudElkeAoBEHRlcnJhaW5HZW5lcmF0b3ICA2FjYwRlbGVtCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCAUDYWNjAl8xCQEHZ2VuQ2hhcgIIBQNhY2MCXzIFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQdUV0VOVFlYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZMlgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkzWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTRYBQFmCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTVYBAF0CgACJGwJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAgAJALoCAgUGYmlnTnVtBQVGSVZFWAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQdGVycmFpbkdlbmVyYXRvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAkAkQMCBQpjb250aW5lbnRzBQxjb250aW5lbnRJZHgEBWlzc3VlCQDCCAUJAQprZXlOZnROYW1lAgUHbGFuZE51bQIBUwkAuQkCCQDMCAIFB2xhbmROdW0JAMwIAgIBUwkAzAgCCAUBdAJfMQkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBAJpZAkA2AQBBQdhc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFAmlkBQh1c2VyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQh1c2VyQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQJpZAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUFbmV3SFAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUDbmlsBQR1bml0AQ11cEluZnJhQ29tbW9uAwxzaG91bGRVc2VNYXQGY2FsbGVyC2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADCQBnAgUIY3VyTGV2ZWwAAwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICBE5GVCAFCkxBTkRQUkVGSVgCICB0b2tlbiBzaG91bGQgYmUgcGFzc2VkIGFzIHBhcmFtBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAVvd25lcgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAhsYW5kU2l6ZQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICAhREdWNrIGxvY2F0aW9uIGlkIGlzIAkAkQMCBQNsb2MFCGxvY0lkeElkAhAsIGJ1dCBzaG91bGQgYmUgBQtsYW5kQXNzZXRJZAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAAZAgFfBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lAwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQUJc2F2ZWRUaW1lAgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECGF2YWlsUmVzCQBoAgkAawMFCWRlbHRhVGltZQUPREFJTFlSRVNCWVBJRUNFBQlEQVlNSUxMSVMFBnBpZWNlcwQGbmV3UmVzCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCCGNsYWltUmVzCQDMCAIFCGF2YWlsUmVzCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhpbmZyYUtleQUIbmV3TGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBm5ld1JlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFA25pbAUIbmV3TGV2ZWwNAWkBCXN0YWtlTGFuZAAEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEJANgEAQUHYXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQAZAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzBQNuaWwBaQELdW5zdGFrZUxhbmQBC2xhbmRBc3NldElkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIkdW5zdGFrZSBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAdhc3NldElkCQDZBAEFC2xhbmRBc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFBHRoaXMJAAIBAhdVbmtub3duIGlzc3VlciBvZiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkxBTkRQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpMQU5EUFJFRklYAhcgdG9rZW5zIGNhbiBiZSB1bnN0YWtlZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplABkA////////////AQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMFA25pbAFpAQlzdGFrZUR1Y2sABANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKRFVDS1BSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkAAgEJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkRVQ0tQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpEVUNLUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQDCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICAh1Zb3UgYWxyZWFkeSBzdGFrZWQgb25lIGR1Y2s6IAgFBWFzc2V0BG5hbWUEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIECGxvY2F0aW9uCQCiCAEFBmxvY0tleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBmhlYWx0aAkAnwgBBQlrZXlIZWFsdGgEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUGaGVhbHRoBQNuaWwJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAGQFA25pbAMJAQlpc0RlZmluZWQBBQhiYWNrcGFjawUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgUDbmlsAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIkdW5zdGFrZSBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkAAgEJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkRVQ0tQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpEVUNLUFJFRklYAhcgdG9rZW5zIGNhbiBiZSB1bnN0YWtlZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCQDYBAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgIJAKwCAgIJVGhlIGR1Y2sgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBCQDYBAEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFB2FkZHJlc3MJAAIBAhdTdGFrZWQgTkZUIGlzIG5vdCB5b3VycwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudAtsYW5kQXNzZXRJZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECJWNsYWltUmVzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiAgdG9rZW4gc2hvdWxkIGJlIHBhc3NlZCBhcyBwYXJhbQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQFb3duZXIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFER1Y2sgbG9jYXRpb24gaWQgaXMgCQCRAwIFA2xvYwUIbG9jSWR4SWQCECwgYnV0IHNob3VsZCBiZSAFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lAwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQUJc2F2ZWRUaW1lAgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIYXZhaWxSZXMJAGgCCQBrAwkAZAIFCWRlbHRhVGltZQkAawMFCWRlbHRhVGltZQUKaW5mcmFMZXZlbAAEBQ9EQUlMWVJFU0JZUElFQ0UFCURBWU1JTExJUwUGcGllY2VzAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBQZwaWVjZXMFD0RBSUxZUkVTQllQSUVDRQQMbmV3VGltZXN0YW1wCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDG5ld0RlbHRhVGltZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECmN1cnJlbnRSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EBWJwUmVzCQEGYWRkUmVzBAUKY3VycmVudFJlcwUNdGVycmFpbkNvdW50cwkAZAIJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQkAawMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUKaW5mcmFMZXZlbAAECQBpAgUGcGllY2VzABkEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkFB25ld1BhY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUFb3duZXIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicFJlcwFpAQZmbGlnaHQCB21lc3NhZ2UDc2lnAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIjZmxpZ2h0IGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQCaHAJALUJAgkAkQMCCQC1CQIJAJEDAgUFcGFydHMAAAIBfAAAAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQNbmV3TG9jQW5kVGltZQkAtQkCCQCRAwIFBXBhcnRzAAECAToEC25ld0xvY2F0aW9uCQCRAwIFDW5ld0xvY0FuZFRpbWUAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDW5ld0xvY0FuZFRpbWUAAQMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQISc2lnbmF0dXJlIG91dGRhdGVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAMJAQIhPQIFDG9sZEZyb21TdGF0ZQUFY3VySFAJAAIBCQCsAgIJAKwCAgkArAICAgpvbGRIZWFsdGg9CQCkAwEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQCLyBmcm9tIHN0YXRlIGRvZXMgbm90IG1hdGNoIG9uZSBmcm9tIGZsaWdodCBsb2c9CQCkAwEFBWN1ckhQAwkAZwIAAAUFY3VySFAJAAIBAh5Zb3UgY2FuJ3QgZmx5IHdpdGggemVybyBoZWFsdGgEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAAACBQtuZXdMb2NhdGlvbgULY3VyTG9jYXRpb24JAAIBAiJZb3UgY2FuJ3QgZmx5IHRvIHRoZSBzYW1lIGxvY2F0aW9uCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIFBW5ld0hQAAAFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVuZXdIUAUDbmlsBQR1bml0AWkBCXNldEhlYWx0aAIGaGVhbHRoC2R1Y2tBc3NldElkAwMJAGYCAAAFBmhlYWx0aAYJAGYCBQZoZWFsdGgAZAkAAgECGkhQIHNob3VsZCBiZSB3aXRoaW4gMC4uMTAwCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQZoZWFsdGgFA25pbAFpAQRoZWFsAgdtYXRUeXBlBmFtb3VudAMDCQBmAgAABQdtYXRUeXBlBgkAZwIFB21hdFR5cGUFBk5VTVJFUwkAAgEJAKwCAgISVW5rbm93biBtYXRlcmlhbDogCQCkAwEFB21hdFR5cGUDCQBnAgAABQZhbW91bnQJAAIBCQCsAgICG0Ftb3VudCBzaG91bGQgYmUgcG9zaXRpdmUhIAkApAMBBQZhbW91bnQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkAZwIFCW9sZEhlYWx0aABkCQACAQIaSFAgc2hvdWxkIGJlIDwgMTAwIHRvIGhlYWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNY3VycmVudEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBW1MaXN0BQdtYXRUeXBlBAtkZWx0YUhlYWx0aAkAlwMBCQDMCAIJAGkCBQZhbW91bnQFCEhFQUxDT1NUCQDMCAIJAGUCAGQFCW9sZEhlYWx0aAUDbmlsBAtzcGVuZEFtb3VudAkAaAIFC2RlbHRhSGVhbHRoBQhIRUFMQ09TVAMJAGYCBQtzcGVuZEFtb3VudAUNY3VycmVudEFtb3VudAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgbmVlZCAJAKQDAQULc3BlbmRBbW91bnQCBCBvZiAJAJEDAgUIbWF0VHlwZXMFB21hdFR5cGUCJCB0byBoZWFsLCBidXQgeW91IGJhY2twYWNrIGNvbnRhaW5zIAkApAMBBQ1jdXJyZW50QW1vdW50BAZuZXdNYXQJAQxzdWJPbmVJbkxpc3QDBQVtTGlzdAUHbWF0VHlwZQULc3BlbmRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAkAZAIFCW9sZEhlYWx0aAULZGVsdGFIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUDbmlsAWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQtlY29ub215QWRkcgkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sFA25pbAUHbmV3UGFjawFpAQ1leHBlZGl0aW9uQnV5AgdtZXNzYWdlA3NpZwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2RuQXNzZXRJZAkAAgECGkFsbG93ZWQgVVNETiBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFB0VYUFVTRE4JAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQdFWFBVU0ROCQEQZXhwZWRpdGlvbkNvbW1vbgUHCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQFB21lc3NhZ2UFA3NpZwFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECJ2V4cGVkaXRpb24gZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwkBEGV4cGVkaXRpb25Db21tb24FBggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBQdtZXNzYWdlBQNzaWcBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECM0luZnJhc3RydWN0dXJlIHVwZ3JhZGUgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwkBDXVwSW5mcmFDb21tb24DBggFAWkGY2FsbGVyBQtsYW5kQXNzZXRJZAFpARB1cGdyYWRlSW5mcmFVc2RuAQtsYW5kQXNzZXRJZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2RuQXNzZXRJZAkAAgECGkFsbG93ZWQgVVNETiBwYXltZW50IG9ubHkhBAhuZXdMZXZlbAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAAAAEEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2RuCQBoAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUFCG5ld0xldmVsABkDCQECIT0CCAUDcG10BmFtb3VudAUEY29zdAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ11cEluZnJhQ29tbW9uAwcIBQFpBmNhbGxlcgULbGFuZEFzc2V0SWQAViKDug==", "height": 2387758, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 589bqNKuZsPSNiJQ9yD3vUx6YSxhbvqiu7rqCNGkx2d5 Next: 1W7obizLaGvWBdXZfEaubk2K6eiBT59GaidPXP8kUwC Diff:
OldNewDifferences
6262 let q = {
6363 let c = a
6464 if (("W" == c))
65- then 39420000000
65+ then 18921595217
6666 else if (("T" == c))
67- then 394200000
67+ then 189215952
6868 else throw("Unknown chain")
6969 }
7070
7171 let r = {
7272 let c = a
7373 if (("W" == c))
74- then 250000000
74+ then 120000000
7575 else if (("T" == c))
76- then 2500000
76+ then 1200000
7777 else throw("Unknown chain")
7878 }
7979
473473 let bk = S(T)
474474 let bB = bj(bk)
475475 let bC = split(bB[ag], "_")
476- let bD = makeString(aB(aC, bC, fraction(q, bX, 25)), "_")
476+ let bD = makeString(aB(aC, bC, fraction(q, (bX * bS), 25)), "_")
477477 let ca = valueOrErrorMessage(getInteger(bU), (("NFT " + bT.name) + " is not staked"))
478478 let aY = (lastBlock.timestamp - ca)
479479 if ((0 > aY))
808808 if ((cd.assetId != b))
809809 then throw("Allowed USDN payment only!")
810810 else {
811+ let bS = (valueOrElse(getInteger(M(bO)), 0) + 1)
811812 let bT = value(assetInfo(fromBase58String(bO)))
812813 let bW = split(bT.description, "_")
813- let cx = fraction(r, aR(bW[Y]), 25)
814+ let cx = fraction(r, (aR(bW[Y]) * bS), 25)
814815 if ((cd.amount != cx))
815816 then throw(("Payment attached should be " + toString(cx)))
816817 else bN(false, aO.caller, bO)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = toUtf8String(take(drop(this.bytes, 1), 1))
55
66 let b = {
77 let c = a
88 if (("W" == c))
99 then base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
1010 else if (("T" == c))
1111 then base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
1212 else throw("Unknown chain")
1313 }
1414
1515 let d = {
1616 let c = a
1717 if (("W" == c))
1818 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
1919 else if (("T" == c))
2020 then this
2121 else throw("Unknown chain")
2222 }
2323
2424 let e = {
2525 let c = a
2626 if (("W" == c))
2727 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
2828 else if (("T" == c))
2929 then this
3030 else throw("Unknown chain")
3131 }
3232
3333 let f = {
3434 let c = a
3535 if (("W" == c))
3636 then addressFromStringValue("3P2sk1KncSxRaZs8b4CWGPw2jkvvav74u4D")
3737 else if (("T" == c))
3838 then addressFromStringValue("3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep")
3939 else throw("Unknown chain")
4040 }
4141
4242 let g = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
4343
4444 let h = 10000
4545
4646 let i = "LAND"
4747
4848 let j = "DUCK"
4949
5050 let k = "Africa_F_Africa"
5151
5252 let l = 6
5353
5454 let m = 3456000
5555
5656 let n = 86400000
5757
5858 let o = 300000
5959
6060 let p = 158549
6161
6262 let q = {
6363 let c = a
6464 if (("W" == c))
65- then 39420000000
65+ then 18921595217
6666 else if (("T" == c))
67- then 394200000
67+ then 189215952
6868 else throw("Unknown chain")
6969 }
7070
7171 let r = {
7272 let c = a
7373 if (("W" == c))
74- then 250000000
74+ then 120000000
7575 else if (("T" == c))
76- then 2500000
76+ then 1200000
7777 else throw("Unknown chain")
7878 }
7979
8080 let s = {
8181 let c = a
8282 if (("W" == c))
8383 then 157679960139
8484 else if (("T" == c))
8585 then 1576799601
8686 else throw("Unknown chain")
8787 }
8888
8989 let t = {
9090 let c = a
9191 if (("W" == c))
9292 then 1000000000
9393 else if (("T" == c))
9494 then 10000000
9595 else throw("Unknown chain")
9696 }
9797
9898 let u = 1000000
9999
100100 let v = toBigInt(5)
101101
102102 let w = toBigInt(20)
103103
104104 let x = toBigInt((20 * 20))
105105
106106 let y = toBigInt(((20 * 20) * 20))
107107
108108 let z = toBigInt((((20 * 20) * 20) * 20))
109109
110110 let A = toBigInt(((((20 * 20) * 20) * 20) * 20))
111111
112112 let B = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
113113
114114 let C = ["Asia", "Europe", "Americas", "Oceania", "Africa"]
115115
116116 func D () = "nextLandNum"
117117
118118
119119 func E (F) = ("landToAsset_" + F)
120120
121121
122122 func G (F,H) = ((i + F) + H)
123123
124124
125125 func I (J) = ("nftOwner_" + J)
126126
127127
128128 func K (J) = ("duckOwner_" + J)
129129
130130
131131 func L (J) = ("stakedTime_" + J)
132132
133133
134134 func M (J) = ("infraLevel_" + J)
135135
136136
137137 func N (O) = ("stakedDuckByOwner_" + O)
138138
139139
140140 func P (Q,J,O) = ((((("stakedTimeByTypeAssetIdAndOwner_" + Q) + "_") + J) + "_") + O)
141141
142142
143143 func R (F) = ("landOwner_" + F)
144144
145145
146146 func S (T) = ("backPack_" + T)
147147
148148
149149 func U (T) = ("duckLocation_" + T)
150150
151151
152152 func V (T) = ("duckHealth_" + T)
153153
154154
155155 func W () = "resTypesProportions"
156156
157157
158158 let X = 0
159159
160160 let Y = 1
161161
162162 let Z = 2
163163
164164 let aa = 3
165165
166166 let ab = 0
167167
168168 let ac = 1
169169
170170 let ad = 2
171171
172172 let ae = 0
173173
174174 let af = 1
175175
176176 let ag = 2
177177
178178 let ah = 3
179179
180180 func ai (aj) = {
181181 let c = aj
182182 if ($isInstanceOf(c, "String"))
183183 then {
184184 let ak = c
185185 ak
186186 }
187187 else throw("fail to cast into String")
188188 }
189189
190190
191191 func al (am) = {
192192 let an = split(value(getString(W())), "_")
193193 if ((size(an) != l))
194194 then throw("Wrong proportions data")
195195 else {
196196 let ao = [parseIntValue(an[0]), parseIntValue(an[1]), parseIntValue(an[2]), parseIntValue(an[3]), parseIntValue(an[4]), parseIntValue(an[5])]
197197 let ap = (((((ao[0] + ao[1]) + ao[2]) + ao[3]) + ao[4]) + ao[5])
198198 if ((0 >= ap))
199199 then throw("No lands staked")
200200 else {
201201 let aq = fraction(am, u, ap)
202202 func ar (as,at) = (as :+ fraction(at, aq, u))
203203
204204 let au = ao
205205 let av = size(au)
206206 let aw = nil
207207 func ax (ay,az) = if ((az >= av))
208208 then ay
209209 else ar(ay, au[az])
210210
211211 func aA (ay,az) = if ((az >= av))
212212 then ay
213213 else throw("List size exceeds 6")
214214
215215 aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
216216 }
217217 }
218218 }
219219
220220
221221 func aB (aC,aD,aE) = {
222222 let aF = al(aE)
223223 func aG (as,aH) = {
224224 let aI = (parseIntValue(aD[aH]) - aF[aH])
225225 if ((0 > aI))
226226 then throw(((((("Not enough material idx=" + toString(aH)) + ", you have ") + aD[aH]) + ", but need ") + toString(aF[aH])))
227227 else (as :+ toString(aI))
228228 }
229229
230230 if (aC)
231231 then {
232232 let au = [0, 1, 2, 3, 4, 5]
233233 let av = size(au)
234234 let aw = nil
235235 func ax (ay,az) = if ((az >= av))
236236 then ay
237237 else aG(ay, au[az])
238238
239239 func aA (ay,az) = if ((az >= av))
240240 then ay
241241 else throw("List size exceeds 6")
242242
243243 aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
244244 }
245245 else aD
246246 }
247247
248248
249249 func aJ (aK,aL,aM) = {
250250 let an = split(valueOrElse(getString(W()), "0_0_0_0_0_0"), "_")
251251 if ((size(an) != l))
252252 then throw("Wrong proportions data")
253253 else {
254254 func aN (as,aO) = {
255255 let aI = (parseIntValue(an[aO]) + ((aM * aK[aO]) * aL))
256256 if ((0 > aI))
257257 then throw(((((((("Panic! Pieces of type=" + toString(aO)) + ", sign=") + toString(aM)) + ", terrainCounts[i]=") + toString(aK[aO])) + ", landSizeIndex=") + toString(aL)))
258258 else (as :+ toString(aI))
259259 }
260260
261261 let ao = {
262262 let au = [0, 1, 2, 3, 4, 5]
263263 let av = size(au)
264264 let aw = nil
265265 func ax (ay,az) = if ((az >= av))
266266 then ay
267267 else aN(ay, au[az])
268268
269269 func aA (ay,az) = if ((az >= av))
270270 then ay
271271 else throw("List size exceeds 6")
272272
273273 aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
274274 }
275275 makeString(ao, "_")
276276 }
277277 }
278278
279279
280280 func aP (aQ) = [(size(split(aQ, "A")) - 1), (size(split(aQ, "B")) - 1), (size(split(aQ, "C")) - 1), (size(split(aQ, "D")) - 1), (size(split(aQ, "E")) - 1), (size(split(aQ, "F")) - 1)]
281281
282282
283283 func aR (H) = {
284284 let c = H
285285 if (("S" == c))
286286 then 25
287287 else if (("M" == c))
288288 then 100
289289 else if (("L" == c))
290290 then 225
291291 else if (("XL" == c))
292292 then 400
293293 else if (("XXL" == c))
294294 then 625
295295 else throw("Unknown land size")
296296 }
297297
298298
299299 func aS (aT,aH,aU) = {
300300 func aV (as,aO) = (as :+ (if ((aO == aH))
301301 then toString((parseIntValue(aT[aO]) - aU))
302302 else aT[aO]))
303303
304304 let ao = {
305305 let au = [0, 1, 2, 3, 4, 5]
306306 let av = size(au)
307307 let aw = nil
308308 func ax (ay,az) = if ((az >= av))
309309 then ay
310310 else aV(ay, au[az])
311311
312312 func aA (ay,az) = if ((az >= av))
313313 then ay
314314 else throw("List size exceeds 6")
315315
316316 aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
317317 }
318318 makeString(ao, "_")
319319 }
320320
321321
322322 func aW (aX,aK,aY,aL) = {
323323 func aZ (as,aO) = {
324324 let ba = ((fraction(aY, m, n) * aK[aO]) * aL)
325325 (as :+ toString((parseIntValue(aX[aO]) + ba)))
326326 }
327327
328328 let ao = {
329329 let au = [0, 1, 2, 3, 4, 5]
330330 let av = size(au)
331331 let aw = nil
332332 func ax (ay,az) = if ((az >= av))
333333 then ay
334334 else aZ(ay, au[az])
335335
336336 func aA (ay,az) = if ((az >= av))
337337 then ay
338338 else throw("List size exceeds 6")
339339
340340 aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
341341 }
342342 makeString(ao, "_")
343343 }
344344
345345
346346 func bb (bc) = if ((bc >= toBigInt(0)))
347347 then bc
348348 else -(bc)
349349
350350
351351 let bd = [[1, 4, 9, 10, 15], [5, 8, 13, 14, 15], [6, 9, 14, 15, 16], [4, 7, 8, 13, 18], [1, 6, 7, 15, 19]]
352352
353353 func be (bf,bg) = {
354354 let bh = toInt((bf % w))
355355 let bi = if ((bg[0] > bh))
356356 then "A"
357357 else if ((bg[1] > bh))
358358 then "B"
359359 else if ((bg[2] > bh))
360360 then "C"
361361 else if ((bg[3] > bh))
362362 then "D"
363363 else if ((bg[4] > bh))
364364 then "E"
365365 else "F"
366366 bi
367367 }
368368
369369
370370 func bj (bk) = {
371371 let bl = split(valueOrElse(getString(bk), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
372372 [toString(valueOrElse(parseInt(bl[ae]), 0)), if ((size(split(bl[af], "_")) == l))
373373 then bl[af]
374374 else "0_0_0_0_0_0", if ((size(split(bl[ag], "_")) == l))
375375 then bl[ag]
376376 else "0_0_0_0_0_0", bl[ah]]
377377 }
378378
379379
380380 func bm (aC,bn,bo,bp,bq) = if (!(sigVerify_8Kb(bp, bq, g)))
381381 then throw("signature does not match")
382382 else {
383383 let br = split(toUtf8String(bp), ";")
384384 let bs = split(split(br[0], "|")[0], "_")
385385 let bt = parseIntValue(bs[0])
386386 let bu = parseIntValue(bs[1])
387387 let bv = split(br[1], ":")
388388 let bw = split(bv[0], "_")
389389 if ((bw[1] != "E"))
390390 then throw("expedition target location type should be E")
391391 else {
392392 let bx = parseIntValue(bv[1])
393393 if (if ((bx > (lastBlock.timestamp + o)))
394394 then true
395395 else ((lastBlock.timestamp - o) > bx))
396396 then throw("signature outdated")
397397 else {
398398 let by = toString(bn)
399399 let T = valueOrErrorMessage(getString(N(by)), "You don't have a duck staked")
400400 let bz = V(T)
401401 let bA = valueOrElse(getInteger(bz), 100)
402402 if ((bA != bt))
403403 then throw(((("oldHealth=" + toString(valueOrElse(getInteger(bz), 100))) + " from state does not match one from flight log=") + toString(bt)))
404404 else if ((0 >= bt))
405405 then throw("You can't fly with zero health")
406406 else if ((0 >= bu))
407407 then throw("Your duck health is zero, expedition failed")
408408 else {
409409 let bk = S(T)
410410 let bB = bj(bk)
411411 let bC = split(bB[ag], "_")
412412 let bD = makeString(aB(aC, bC, s), "_")
413413 let bE = bb(toBigInt(bo))
414414 let bF = valueOrElse(getInteger(D()), 501)
415415 let F = toString(bF)
416416 let bG = toInt((bE % v))
417417 let bH = bd[bG]
418418 func bI (as,at) = $Tuple2((((((as._1 + be(as._2, bH)) + be((as._2 / w), bH)) + be((as._2 / x), bH)) + be((as._2 / y), bH)) + be((as._2 / z), bH)), (as._2 / A))
419419
420420 let bJ = {
421421 let au = [1, 2, 3, 4, 5]
422422 let av = size(au)
423423 let aw = $Tuple2("", (bE / v))
424424 func ax (ay,az) = if ((az >= av))
425425 then ay
426426 else bI(ay, au[az])
427427
428428 func aA (ay,az) = if ((az >= av))
429429 then ay
430430 else throw("List size exceeds 5")
431431
432432 aA(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5)
433433 }
434434 let bK = C[bG]
435435 let bL = Issue(G(F, "S"), makeString([F, "S", bJ._1, bK], "_"), 1, 0, false)
436436 let J = calculateAssetId(bL)
437437 let bM = toBase58String(J)
438438 $Tuple2([IntegerEntry(D(), (bF + 1)), bL, StringEntry(E(F), bM), StringEntry(I(bM), by), StringEntry(R(F), by), IntegerEntry(M(bM), 0), ScriptTransfer(bn, 1, J), StringEntry(U(T), makeString([bK, "L", bM], "_")), IntegerEntry(bz, bu), StringEntry(bk, makeString([bB[ae], bB[af], bD, bB[ah]], ":"))], unit)
439439 }
440440 }
441441 }
442442 }
443443
444444
445445 func bN (aC,bn,bO) = {
446446 let bP = toString(bn)
447447 let bQ = M(bO)
448448 let bR = valueOrElse(getInteger(bQ), 0)
449449 if ((bR >= 3))
450450 then throw("Currently max infrastructure level = 3")
451451 else {
452452 let bS = (bR + 1)
453453 let bT = value(assetInfo(fromBase58String(bO)))
454454 if (!(contains(bT.name, i)))
455455 then throw((("NFT " + i) + " token should be passed as param"))
456456 else {
457457 let bU = L(bO)
458458 let bV = getStringValue(I(bO))
459459 if ((bV != bP))
460460 then throw((i + " is not yours"))
461461 else {
462462 let bW = split(bT.description, "_")
463463 let H = bW[Y]
464464 let bX = aR(H)
465465 let T = valueOrErrorMessage(getString(N(bP)), "You don't have a duck staked")
466466 let bY = valueOrElse(getString(U(T)), k)
467467 let bZ = split(value(bY), "_")
468468 if ((bZ[ac] != "L"))
469469 then throw((("Duck location type is " + bZ[ac]) + ", but should be L"))
470470 else if ((bZ[ad] != bO))
471471 then throw(((("Duck location id is " + bZ[ad]) + ", but should be ") + bO))
472472 else {
473473 let bk = S(T)
474474 let bB = bj(bk)
475475 let bC = split(bB[ag], "_")
476- let bD = makeString(aB(aC, bC, fraction(q, bX, 25)), "_")
476+ let bD = makeString(aB(aC, bC, fraction(q, (bX * bS), 25)), "_")
477477 let ca = valueOrErrorMessage(getInteger(bU), (("NFT " + bT.name) + " is not staked"))
478478 let aY = (lastBlock.timestamp - ca)
479479 if ((0 > aY))
480480 then throw(((("Saved timestamp is in future, saved = " + toString(ca)) + ", current = ") + toString(lastBlock.timestamp)))
481481 else {
482482 let cb = (fraction(aY, m, n) * bX)
483483 let cc = ai(invoke(this, "claimRes", [cb, bO], nil))
484484 $Tuple2([IntegerEntry(bQ, bS), StringEntry(bk, makeString([bB[ae], cc, bD, bB[ah]], ":"))], bS)
485485 }
486486 }
487487 }
488488 }
489489 }
490490 }
491491
492492
493493 @Callable(aO)
494494 func stakeLand () = {
495495 let cd = value(aO.payments[0])
496496 let J = value(cd.assetId)
497497 let ce = toString(aO.caller)
498498 if ((cd.amount != 1))
499499 then throw((("NFT " + i) + " token should be attached as payment"))
500500 else {
501501 let bT = value(assetInfo(J))
502502 if ((bT.issuer != this))
503503 then throw("Unknown issuer of token")
504504 else if (!(contains(bT.name, i)))
505505 then throw((("Only NFT " + i) + " tokens are accepted"))
506506 else {
507507 let cf = drop(bT.name, 4)
508508 let F = if (contains(cf, "XXL"))
509509 then dropRight(cf, 3)
510510 else if (contains(cf, "XL"))
511511 then dropRight(cf, 2)
512512 else dropRight(cf, 1)
513513 if (!(isDefined(parseInt(F))))
514514 then throw(("Cannot parse land number from " + bT.name))
515515 else {
516516 let bU = L(toBase58String(J))
517517 if (isDefined(getInteger(bU)))
518518 then throw((("NFT " + bT.name) + " is already staked"))
519519 else {
520520 let bW = split(bT.description, "_")
521521 let aK = aP(bW[Z])
522522 let an = aJ(aK, (aR(bW[Y]) / 25), 1)
523523 [IntegerEntry(bU, lastBlock.timestamp), IntegerEntry(P(i, toBase58String(J), ce), lastBlock.timestamp), StringEntry(I(toBase58String(J)), ce), StringEntry(R(F), ce), StringEntry(W(), an)]
524524 }
525525 }
526526 }
527527 }
528528 }
529529
530530
531531
532532 @Callable(aO)
533533 func unstakeLand (bO) = if ((size(aO.payments) != 0))
534534 then throw("unstake doesn't require any payments")
535535 else {
536536 let J = fromBase58String(bO)
537537 let ce = toString(aO.caller)
538538 let bT = value(assetInfo(J))
539539 if ((bT.issuer != this))
540540 then throw("Unknown issuer of token")
541541 else if (!(contains(bT.name, i)))
542542 then throw((("Only NFT " + i) + " tokens can be unstaked"))
543543 else {
544544 let bU = L(bO)
545545 if (!(isDefined(bU)))
546546 then throw((("NFT " + bT.name) + " is not staked"))
547547 else {
548548 let bV = valueOrErrorMessage(getString(I(bO)), (("NFT " + bT.name) + " is orphaned"))
549549 if ((bV != ce))
550550 then throw("Staked NFT is not yours")
551551 else {
552552 let bW = split(bT.description, "_")
553553 let aK = aP(bW[Z])
554554 let an = aJ(aK, (aR(bW[Y]) / 25), -1)
555555 [ScriptTransfer(aO.caller, 1, J), DeleteEntry(bU), DeleteEntry(P(i, bO, ce)), StringEntry(W(), an)]
556556 }
557557 }
558558 }
559559 }
560560
561561
562562
563563 @Callable(aO)
564564 func stakeDuck () = {
565565 let cd = value(aO.payments[0])
566566 let J = value(cd.assetId)
567567 let ce = toString(aO.caller)
568568 if ((cd.amount != 1))
569569 then throw((("NFT " + j) + " token should be attached as payment"))
570570 else {
571571 let bT = value(assetInfo(J))
572572 if (if ((bT.issuer != d))
573573 then (bT.issuer != e)
574574 else false)
575575 then throw((("Unknown issuer of " + j) + " token"))
576576 else if (!(contains(bT.name, j)))
577577 then throw((("Only NFT " + j) + " tokens are accepted"))
578578 else {
579579 let cg = toBase58String(J)
580580 let bU = L(cg)
581581 if (isDefined(getInteger(bU)))
582582 then throw((("NFT " + bT.name) + " is already staked"))
583583 else if (isDefined(getString(N(ce))))
584584 then throw(("You already staked one duck: " + bT.name))
585585 else {
586586 let ch = U(cg)
587587 let ci = getString(ch)
588588 let bz = V(cg)
589589 let cj = getInteger(bz)
590590 let bk = S(cg)
591591 let ck = getString(bk)
592592 ([IntegerEntry(bU, lastBlock.timestamp), IntegerEntry(P(j, toBase58String(J), ce), lastBlock.timestamp), StringEntry(K(cg), ce), StringEntry(N(ce), cg)] ++ (if (isDefined(ci))
593593 then nil
594594 else ([StringEntry(ch, k)] ++ (if (isDefined(cj))
595595 then nil
596596 else ([IntegerEntry(bz, 100)] ++ (if (isDefined(ck))
597597 then nil
598598 else [StringEntry(bk, "0:0_0_0_0_0_0:0_0_0_0_0_0:")]))))))
599599 }
600600 }
601601 }
602602 }
603603
604604
605605
606606 @Callable(aO)
607607 func unstakeDuck (cg) = if ((size(aO.payments) != 0))
608608 then throw("unstake doesn't require any payments")
609609 else {
610610 let J = fromBase58String(cg)
611611 let ce = toString(aO.caller)
612612 let bT = value(assetInfo(J))
613613 if (if ((bT.issuer != d))
614614 then (bT.issuer != e)
615615 else false)
616616 then throw((("Unknown issuer of " + j) + " token"))
617617 else if (!(contains(bT.name, j)))
618618 then throw((("Only NFT " + j) + " tokens can be unstaked"))
619619 else {
620620 let bU = L(toBase58String(J))
621621 if (!(isDefined(bU)))
622622 then throw((("NFT " + bT.name) + " is not staked"))
623623 else if (!(isDefined(N(ce))))
624624 then throw((("The duck " + bT.name) + " is not staked"))
625625 else {
626626 let bV = valueOrErrorMessage(getString(K(toBase58String(J))), (("NFT " + bT.name) + " is orphaned"))
627627 if ((bV != ce))
628628 then throw("Staked NFT is not yours")
629629 else [ScriptTransfer(aO.caller, 1, J), DeleteEntry(bU), DeleteEntry(U(cg)), DeleteEntry(P(j, cg, ce)), DeleteEntry(N(ce))]
630630 }
631631 }
632632 }
633633
634634
635635
636636 @Callable(aO)
637637 func claimRes (aU,bO) = if ((size(aO.payments) != 0))
638638 then throw("claimRes doesn't require any payments")
639639 else {
640640 let bP = toString(aO.originCaller)
641641 let bT = value(assetInfo(fromBase58String(bO)))
642642 if (!(contains(bT.name, i)))
643643 then throw((("NFT " + i) + " token should be passed as param"))
644644 else {
645645 let bU = L(bO)
646646 let bV = getStringValue(I(bO))
647647 if ((bV != bP))
648648 then throw((i + " is not yours"))
649649 else {
650650 let bW = split(bT.description, "_")
651651 let H = bW[Y]
652652 let aK = aP(bW[Z])
653653 let T = valueOrErrorMessage(getString(N(bP)), "You don't have a duck staked")
654654 let bY = valueOrElse(getString(U(T)), k)
655655 let bZ = split(value(bY), "_")
656656 if ((bZ[ac] != "L"))
657657 then throw((("Duck location type is " + bZ[ac]) + ", but should be L"))
658658 else if ((bZ[ad] != bO))
659659 then throw(((("Duck location id is " + bZ[ad]) + ", but should be ") + bO))
660660 else {
661661 let ca = valueOrErrorMessage(getInteger(bU), (("NFT " + bT.name) + " is not staked"))
662662 let aY = (lastBlock.timestamp - ca)
663663 if ((0 > aY))
664664 then throw(((("Saved timestamp is in future, saved = " + toString(ca)) + ", current = ") + toString(lastBlock.timestamp)))
665665 else {
666666 let bX = aR(H)
667667 let cl = valueOrElse(getInteger(M(bO)), 0)
668668 let cb = (fraction((aY + fraction(aY, cl, 4)), m, n) * bX)
669669 if ((aU > cb))
670670 then throw(((("Not enough resources, available = " + toString(cb)) + ", requested = ") + toString(aU)))
671671 else {
672672 let cm = fraction((cb - aU), n, (bX * m))
673673 let cn = (lastBlock.timestamp - cm)
674674 let bk = S(T)
675675 let bB = bj(bk)
676676 let aX = split(bB[af], "_")
677677 let co = aW(aX, aK, ((aY - cm) + fraction((aY - cm), cl, 4)), (bX / 25))
678678 let cp = makeString([bB[ae], co, bB[ag], bB[ah]], ":")
679679 $Tuple2([StringEntry(bk, cp), IntegerEntry(bU, cn), IntegerEntry(P(i, bO, bV), cn)], co)
680680 }
681681 }
682682 }
683683 }
684684 }
685685 }
686686
687687
688688
689689 @Callable(aO)
690690 func flight (bp,bq) = if (!(sigVerify_8Kb(bp, bq, g)))
691691 then throw("signature does not match")
692692 else if ((size(aO.payments) != 0))
693693 then throw("flight doesn't require any payments")
694694 else {
695695 let br = split(toUtf8String(bp), ";")
696696 let bs = split(split(br[0], "|")[0], "_")
697697 let bt = parseIntValue(bs[0])
698698 let bu = parseIntValue(bs[1])
699699 let cq = split(br[1], ":")
700700 let cr = cq[0]
701701 let bx = parseIntValue(cq[1])
702702 if (if ((bx > (lastBlock.timestamp + o)))
703703 then true
704704 else ((lastBlock.timestamp - o) > bx))
705705 then throw("signature outdated")
706706 else {
707707 let T = valueOrErrorMessage(getString(N(toString(aO.caller))), "You don't have a duck staked")
708708 let bz = V(T)
709709 let bA = valueOrElse(getInteger(bz), 100)
710710 if ((bA != bt))
711711 then throw(((("oldHealth=" + toString(valueOrElse(getInteger(bz), 100))) + " from state does not match one from flight log=") + toString(bt)))
712712 else if ((0 >= bt))
713713 then throw("You can't fly with zero health")
714714 else {
715715 let ch = U(T)
716716 let bY = valueOrElse(getString(ch), k)
717717 if ((cr == bY))
718718 then throw("You can't fly to the same location")
719719 else $Tuple2([StringEntry(ch, if ((bu > 0))
720720 then cr
721721 else bY), IntegerEntry(bz, bu)], unit)
722722 }
723723 }
724724 }
725725
726726
727727
728728 @Callable(aO)
729729 func setHealth (cj,T) = if (if ((0 > cj))
730730 then true
731731 else (cj > 100))
732732 then throw("HP should be within 0..100")
733733 else [IntegerEntry(V(T), cj)]
734734
735735
736736
737737 @Callable(aO)
738738 func heal (cs,aU) = if (if ((0 > cs))
739739 then true
740740 else (cs >= l))
741741 then throw(("Unknown material: " + toString(cs)))
742742 else if ((0 >= aU))
743743 then throw(("Amount should be positive! " + toString(aU)))
744744 else {
745745 let T = valueOrErrorMessage(getString(N(toString(aO.caller))), "You don't have a duck staked")
746746 let bz = V(T)
747747 let ct = valueOrElse(getInteger(bz), 100)
748748 if ((ct >= 100))
749749 then throw("HP should be < 100 to heal")
750750 else {
751751 let bk = S(T)
752752 let bB = bj(bk)
753753 let bC = split(bB[ag], "_")
754754 let cu = parseIntValue(bC[cs])
755755 let cv = min([(aU / h), (100 - ct)])
756756 let cw = (cv * h)
757757 if ((cw > cu))
758758 then throw(((((("You need " + toString(cw)) + " of ") + B[cs]) + " to heal, but you backpack contains ") + toString(cu)))
759759 else {
760760 let bD = aS(bC, cs, cw)
761761 [IntegerEntry(bz, (ct + cv)), StringEntry(bk, makeString([bB[ae], bB[af], bD, bB[ah]], ":"))]
762762 }
763763 }
764764 }
765765
766766
767767
768768 @Callable(aO)
769769 func updateBackpack (T,cp) = if ((aO.caller != f))
770770 then throw("permission denied")
771771 else $Tuple2([StringEntry(S(T), cp)], cp)
772772
773773
774774
775775 @Callable(aO)
776776 func expeditionBuy (bp,bq) = if ((size(aO.payments) != 1))
777777 then throw("Exactly one payment required")
778778 else {
779779 let cd = value(aO.payments[0])
780780 if ((cd.assetId != b))
781781 then throw("Allowed USDN payment only!")
782782 else if ((cd.amount != t))
783783 then throw(("Payment attached should be " + toString(t)))
784784 else bm(false, aO.caller, aO.transactionId, bp, bq)
785785 }
786786
787787
788788
789789 @Callable(aO)
790790 func expedition (bp,bq) = if ((size(aO.payments) != 0))
791791 then throw("expedition doesn't require any payments")
792792 else bm(true, aO.caller, aO.transactionId, bp, bq)
793793
794794
795795
796796 @Callable(aO)
797797 func upgradeInfra (bO) = if ((size(aO.payments) != 0))
798798 then throw("Infrastructure upgrade doesn't require any payments")
799799 else bN(true, aO.caller, bO)
800800
801801
802802
803803 @Callable(aO)
804804 func upgradeInfraUsdn (bO) = if ((size(aO.payments) != 1))
805805 then throw("Exactly one payment required")
806806 else {
807807 let cd = value(aO.payments[0])
808808 if ((cd.assetId != b))
809809 then throw("Allowed USDN payment only!")
810810 else {
811+ let bS = (valueOrElse(getInteger(M(bO)), 0) + 1)
811812 let bT = value(assetInfo(fromBase58String(bO)))
812813 let bW = split(bT.description, "_")
813- let cx = fraction(r, aR(bW[Y]), 25)
814+ let cx = fraction(r, (aR(bW[Y]) * bS), 25)
814815 if ((cd.amount != cx))
815816 then throw(("Payment attached should be " + toString(cx)))
816817 else bN(false, aO.caller, bO)
817818 }
818819 }
819820
820821

github/deemru/w8io/169f3d6 
95.32 ms