tx · AcVVsBoj3WReYh1Y9Sx18LhYGwSeu28Pud4tdCcg5fbA

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.02500000 Waves

2023.01.04 21:35 [2390579] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

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

github/deemru/w8io/026f985 
140.57 ms